0

次のようにサブプロセスを実行するスクリプトがあります。

child_process = subprocess.Popen(["python", testset['dir'] + testname, \                                                                                                                                     
                              output_spec_file, plugin_directory],\                                                          
                              stderr=subprocess.PIPE, stdout=subprocess.PIPE)

そのプロセスで、印刷ステートメントを挿入しようとしていますが、stdout には表示されません。sys.stdout.write()そのサブプロセスで使用してみましたが、そのsys.stduout.read()直後にchild_process出力をキャプチャしていません。

私は Python を初めて使用し、Python でそのレベルの複雑さに達していません。私は実際にCで低レベルで作業しており、いくつかのPythonテストスクリプトがあり、サブプロセスから出力する方法がわかりません.

助言がありますか?

4

1 に答える 1

1

sys.stdout.read(および) は、現在のプロセス(サブプロセスではない)writeの標準入出力用です。子プロセスの標準入力に書き込みたい場合は、次を使用する必要があります。

child_process.stdin.write("this goes to child")  #Popen(..., stdin=subprocess.PIPE)

子の stdout ストリームから読み取る場合も同様です。

child_process = subprocess.Popen( ... , stdout=subprocess.PIPE)
child_process.stdout.read("This is the data that comes back")

もちろん、一般的には次のように使用する方が慣用的です。

stdoutdata, stderrdata = child_process.communicate(stdindata)

(必要に応じて Popen コンストラクターに渡すように注意しsubprocess.PIPEてください) 入力データを一度にすべて渡すことができる場合。

于 2012-10-09T03:37:27.683 に答える