python - 从 subprocess.Popen 获取整个输出

标签 python subprocess stdout

调用 subprocess.Popen 得到的结果有点奇怪,我怀疑这与我是 Python 新手有很大关系。

args = [ 'cscript', '%USERPROFILE%\\tools\\jslint.js','%USERPROFILE%\\tools\\jslint.js' ]
p = Popen(args, stdout=PIPE, shell=True).communicate()[0]

结果如下所示(尾随双\r\n 以防它很重要)

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\n

如果我从交互式 Python shell 运行该命令,它看起来像这样

>>> args = ['cscript', '%USERPROFILE%\\tools\\jslint.js', '%USERPROFILE%\\tools\jslint.js']
>>> p = subprocess.Popen(args, stdout=subprocess.PIPE, shell=True).communicate()[0]
Lint at line 5631 character 17: Unexpected /*member 'OpenTextFile'.
f = fso.OpenTextFile(WScript.Arguments(0), 1),

...

Lint at line 5649 character 17: Unexpected /*member 'Quit'.
WScript.Quit(1);

所以这就是我真正关心的所有输出,但是如果我转储我刚刚设置的“p”变量的值...

>>> p
'Microsoft (R) Windows Script Host Version 5.8\r\nCopyright (C) Microsoft Corpor
ation. All rights reserved.\r\n\r\n'
>>>

我想要的所有数据最终去了哪里?它绝对没有以“p”结尾。看起来它会输出到标准输出,但我没有明确告诉它不要那样做吗?

我在使用 Python 2.6.6 的 Windows 7 x64 上运行它

最佳答案

它会变成 std​​err 吗?尝试重定向:

p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True).communicate()[0]

关于python - 从 subprocess.Popen 获取整个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3947191/

相关文章:

java - 以编程方式与 Java 中的 I/O 程序交互

python - 从 PayPal 的 Sandbox IPN 获得无效响应

Python 停止 Splinter 等待所有内容加载

python - 如何为 python 应用程序的所有子项设置语言环境?

python - 在spyder ipython中启用subprocess.run的打印

c++ - 并发cout格式化

python - 无法使用 docker 内的解释器运行 python 脚本 [Errno 13] 权限被拒绝

python - SSL: SSLV3_ALERT_HANDSHAKE_FAILURE sslv3 警报握手失败 (_ssl.c:833)

python - Popen 与冲突的可执行文件/路径

pipe - 重定向后缀命令管道的输出