スレッド内でサブプロセス モジュールと Popen を使用して「rsync」を起動しようとしています。rsync を呼び出した後、出力も読み取る必要があります。出力を読み取るために、communication メソッドを使用しています。スレッドを使用しない場合、コードは正常に実行されます。スレッドを使用すると、通信呼び出しでハングするようです。私が気付いたもう 1 つのことは、shell=False を設定すると、スレッドで実行しているときに通信から何も返されないことです。
質問する
72745 次
2 に答える
16
スレッドを使用しない優れた実装を次に示し ます。
import subprocess
def execute(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = ''
# Poll process for new output until finished
for line in iter(process.stdout.readline, ""):
print line,
output += line
process.wait()
exitCode = process.returncode
if (exitCode == 0):
return output
else:
raise Exception(command, exitCode, output)
execute(['ping', 'localhost'])
于 2011-02-02T09:25:26.907 に答える