2017-03-26 3 views
0

にPythonのファイルを実行している:その出力をプリントアウトする出力なし、私は次のコードを使用してPythonでプログラムを書いた背景

for item in items: 
     sys.stdout.write("".join(str(i) for i in item)) 
     sys.stdout.write(self.separator) 
     sys.stdout.flush() 

を。

私は端子を介して、通常はそれを実行します。

[email protected]:~$ ./program.py 

それがうまく動作します。

また、私はそれを実行して、ファイルに標準出力を送信するとき:

[email protected]:~$ ./program.py > file 

しかし、私は、バックグラウンドでそれを実行しようとすると:

[email protected]:~$ ./program.py > file & 

それが出力したファイルを満たしていません。

誰かが解決する方法を知っていますか?

+0

にありますどのように多くのアイテム'items'?バッファリングの問題のようです。 – codeforester

+0

@ codeforesterのポイントに、-uフラグを付けてPythonを実行して、バッファリングが本当に原因であるかどうかを調べることができますか? 'python -u ./program.py> file&' – bernie

答えて

0

は、私はKeyboardInterrupt raw_input() を待っているという行を削除することによってそれを解決し、ループしながら、無限に置き換える

./program.py > file & 

代わりの

./program.py > file $ 
+0

私は&を使います。私がその質問を書いたのはちょうどタイプミスです。 – Hunry3rd

+0

それから、nohup ./program.py> file& – shahin

+0

か、sudo nohup bash -x program.py> file& – shahin

0

を実行してみてください。

最初の質問を理解してください:バックグラウンドで実行すると、この行によってプロセスがstdoutを正しく渡さないのはなぜですか? この問題はfgで実行されているときは表示されません。

は今、私はそれを殺すために必要なことで

kill -9 PID 

に2番目の質問のプロセスを終了:どのように私はブロッキングを使用せずに(それはCで確認することができますように)そのバッファを介して、キーストロークをチェックし、機能を待つことができるしraw_input()?

0

ソリューション全体:

ながら、(真):

  1. は、実行中のプログラムに次のコードを追加します。空のファイルに標準入力をリダイレクト 試み: = raw_input () aiの場合: ai == "q"の場合: tb.stop() tb.wait()

  2. ./programでプログラムを実行します。PY私だけ

    は "q" をエコーファイルに 'Q' を記述する必要が実行されているBGプロセスを終了させるためには< fileSTDIN &

  3. > fileSTDIN

関連する問題