は、私がこれを書い言う:私はsubprocess.Popenから返されたファイルハンドルをポーリングする方法はありますか?
line = p.stdout.readline()
をすれば、サブプロセスは、次の行を出力するまで
from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)
は今、私のプログラムを待ちます。
私がp.stdout
に行うことができる魔法はありますか?それがあれば出力を読むことができますが、それ以外の場合はそのまま続行できますか? Queue.get_nowait()
私はちょうどp.stdout
を読むためのスレッドを作成できますが、私は新しいスレッドを作成できないとしましょう。
+1私はこの解決策が好きです –
正確に何が返されますか?これは、読み込むためにどれくらいのバイト数があるかという手がかりをまだ与えていません。 – iElectric
'select'は、ブロックせずにI/Oを実行できるファイル記述子のセット(あなたが渡したファイル記述子のセット)を返します。事実(システムに依存する)の後にp.stdoutをnon-blockingに設定することができれば、いくつかの大きなNに対してはp.stdout.read(N)だけで、実際に利用可能なすべてのバイトを得ることができます。ノンブロッキングオプションが利用できない場合は、一度に1バイトずつ読み込み、それ以上がないことを示すまで「選択」に戻ります。読み込んだバイトを必ずリストに追加し、最後に ".join"を追加してください(文字列に+ = 'ng離れているよりはるかに速い!)。 –