これに関するいくつかの質問に答えた8つの異なる方法を読んで試しました. Python でプロセスを開きましたが、プロセスがまだ終了していなくても、その出力を読みたいと思っています。通常、プロセスは少なくとも 1 分間、または割り込みが送信されるまで完了しません。何を試しても、出力を読み取ることができません。渡したコマンドと引数が機能することはわかっています。これを subprocess.call(cmd, args) に変更すると、すべてが画面に出力されるためです。また、プロセスが ps -ax で実行されていることも確認しました。これが私が試していることの例です( cat /dev/random は私のプロジェクトとは関係ありません):
proc = subprocess.Popen(["cat", "/dev/random"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print("Process started.")
これまでに失敗した私が試したことは次のとおりです。
for line in iter(p.stdout.readline, ''):
strLine = str(line).rstrip()
print(">>> " + strLine )
sys.stdout.flush()
と
output, error = proc.communicate()
print output
と
while proc.poll() is None:
print("Still waiting.")
print(proc.stdout.readline(1))
これのバリエーションである私が試した解決策は他にもありますが、運はありません。stdout を変更せずに call 関数を使用すると、すべてがコンソールに正しく出力されます。私は何を間違っていますか?
Python 2.6 を使用しています。