Python subprocess.Popen不适用于标准输出

Python subprocess.Popen不适用于标准输出,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,我需要实现一个外部应用程序来计算Modbus通信的CRC值。 可执行文件需要输入字符串并返回如下输出: CRC16 = 0x67ED / 26605 CRC16 (Modbus) = 0x7CED / 31981 我调用程序,然后手动输入 p = Popen(["some_file.exe", "-x"], stdin=PIPE) p.communicate("some_string") 到目前为止,这一切都很顺利 但是,我想将输出保存到一个变量或其他东西(没有额外的文件)以供进一步使用 我

我需要实现一个外部应用程序来计算Modbus通信的CRC值。 可执行文件需要输入字符串并返回如下输出:

CRC16 = 0x67ED / 26605
CRC16 (Modbus) = 0x7CED / 31981
我调用程序,然后手动输入

p = Popen(["some_file.exe", "-x"], stdin=PIPE)
p.communicate("some_string")
到目前为止,这一切都很顺利

但是,我想将输出保存到一个变量或其他东西(没有额外的文件)以供进一步使用

我知道有stdout和stderr参数,但在键入时

p = Popen([file, "-x"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
什么也没发生

有人知道该怎么做吗

提前谢谢


PS:在Windows 7上使用Python 2.7。

要获得ls的输出,请使用stdout=subprocess.PIPE

proc = subprocess.Popen('ls', stdout=subprocess.PIPE)
output = proc.stdout.read()
print output
获得自:

注:

如果将stdin用作管道,则必须指定一个值,如本例所示:

grep = Popen('grep ntp'.split(), stdin=PIPE, stdout=PIPE)
ls = Popen('ls /etc'.split(), stdout=grep.stdin)
output = grep.communicate()[0]
如果值是由控制台使用管道给出的,则必须指定stdin值读数 sys.stdin

好的,我想出来了

在一篇较老的帖子中写道:

p.communicate()
只需等待以下形式的输入:

p = Popen(["some_file.exe", "-x"], stdout=PIPE, stdin=PIPE, stderr=PIPE)
output = p.communicate(input="some_string")[0]

然后输出所有接收到的信息。

感谢您的回复。我不知道,但这似乎不起作用。我需要给程序一个输入,因此需要一个
stdin=PIPE
。仅使用此参数可以,但添加
stdout=PIPE
则不行。我甚至无法写入变量
output=…
@mulm如果使用
stdin=PIPE
必须为stdin赋值,否则它将为null。