在子进程中打印到stdout

时间:2012-10-09 03:32:56

标签: python subprocess

我有一个运行子进程的脚本,如下所示:

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

在这个过程中,我试图插入print语句,但它们没有出现在stdout中。我尝试在该子流程中使用sys.stdout.write(),然后在sys.stduout.read()之后使用child_process,但它没有捕获输出。

我是Python的新手,我还没有达到Python的复杂程度。我实际上在C级工作,有一些Python测试脚本,我不知道如何从子进程打印出来。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

sys.stdout.read(和write)用于当前进程(不是子进程)的标准输入/输出。如果要写入子进程的stdin,则需要使用:

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)

(注意将subprocess.PIPE传递给适当的Popen构造函数),前提是您的输入数据可以一次传递。