繁体   English   中英

Python Subprocess stdout 和communication()[0] 不打印终端会的输出

[英]Python Subprocess stdout and communicate()[0] not printing output that terminal would

这是我的代码。

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 的输出(它只是打印到标准输出)。 但是在 python 中, output 什么都不打印, output2 打印

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

我需要做什么才能返回输出?

您需要在Popen()使用选项shell=True才能使管道工作。

请注意,如果您Popen知道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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM