33

スレッド内でサブプロセス モジュールと Popen を使用して「rsync」を起動しようとしています。rsync を呼び出した後、出力も読み取る必要があります。出力を読み取るために、communication メソッドを使用しています。スレッドを使用しない場合、コードは正常に実行されます。スレッドを使用すると、通信呼び出しでハングするようです。私が気付いたもう 1 つのことは、shell=False を設定すると、スレッドで実行しているときに通信から何も返されないことです。

4

2 に答える 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 に答える