プロセスを開始し、プロセスの実行中にそのプロセスの出力を読み取る必要があります。出力 (オプション) を印刷し、プロセスが終了したときに出力を返すことができるようにしたいと考えています。これが私がこれまでに持っているものです(stackoverflowの他の回答からマージされました):
def call(command, print_output):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = ""
while True:
line = process.stdout.readline().rstrip().decode("utf-8")
if line == '':
break
if print_output:
print(line)
out += line + "\n"
process.wait()
return process.returncode, out
このコードは Windows (Windows 7、Python 3.3 でテスト済み) では問題なく動作しますが、Linux (Ubuntu 12.04、Python 3.2) では失敗します。Linux では、スクリプトが次の行でハングします。
line = process.stdout.readline().rstrip().decode("utf-8")
プロセスが終了したとき。
コードの何が問題になっていますか? process.poll() でもプロセスが終了したかどうかを確認しようとしましたが、Linux では常に None を返します。