Python子进程stdout和communic()[0]不打印终端的输出

时间:2012-11-11 19:00:00

标签: python terminal popen subprocess

这是我的代码。

import subprocess

bashCommand = "./program -s file_to_read.txt | ./awk_program.txt"
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
output = process.communicate()[0]
output2 = process.stdout
print output
print output2

当在终端中使用时,单独使用此bash命令会打印awk_program的输出(仅打印到stdout)。但是在python中,输出什么都没打印,而output2打印

<closed file '<fdopen>', mode 'rb' at 0x2b5b20>

返回输出需要做什么?

1 个答案:

答案 0 :(得分:2)

您需要使用shell=True中的Popen()选项让管道正常工作。

请注意,如果您不确切知道Popen输入的来源,那么shell=True就是security risk

此外,您无需在此处拆分bashCommand。例如:

>>> import subprocess as sp    
>>> cmd = 'echo "test" | cat'
>>> process = sp.Popen(cmd,stdout=sp.PIPE,shell=True)
>>> output = process.communicate()[0]
>>> print output
test