这是我的代码。
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
在终端打印awk_program的输出时,单独使用此bash命令(仅打印到stdout)。但是在python中,输出无打印,输出2打印
<closed file '<fdopen>', mode 'rb' at 0x2b5b20>
我需要做什么才能返回输出?
您需要使用Popen()
中的 shell=True
进行管道工作。
请注意,如果您不确切知道Popen
输入来自何处,则shell=True
是安全风险。
另外,您无需在此处拆分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