我有一个运行子进程的脚本,如下所示:
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测试脚本,我不知道如何从子进程打印出来。
有什么建议吗?
答案 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构造函数),前提是您的输入数据可以一次传递。