python 子进程正在交互模式下工作,但不是脚本模式

标签 python windows python-2.7

在 Windows 中我必须执行如下命令:

process = subprocess.Popen([r'C:\Program Files (x86)\xxx\xxx.exe', '-n', '@iseasn2a7.sd.xxxx.com:3944#dc', '-d', r'D:\test\file.txt'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
process.communicate()

这在 python 交互模式下工作正常,但根本不能从 python 脚本执行。

可能是什么问题?

最佳答案

Popen.communicate本身不打印任何内容,但它返回 stdout、stderr 输出。除此之外,因为代码在创建 Popen 时指定了 stdout=PIPE, stderr=...,所以它捕获输出(不会让子进程直接将输出打印到父进程的标准输出)

需要手动打印返回值:

process = ....
output, error = process.communicate()
print output

如果您不希望这样,请不要通过省略 stdout=PIPE, stderr=... 来捕获 stdout 输出。

然后,您不需要使用沟通,而只需等待:

process = subprocess.Popen([...], shell=True)
process.wait()

或者,您可以使用 subprocess.call 来执行子进程并等待其终止:

subprocess.call([...], shell=True)

关于python 子进程正在交互模式下工作,但不是脚本模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26135587/

相关文章:

python - 迪斯科/MapReduce : Using results of previous iteration as input to new iteration

c# - .Net 跳码

python - 使用 Python-Request 的 REST 发布

permissions - virtualenv python 可执行文件 (lubuntu-12.10) 的奇怪权限问题

python - 模式后面不再有数字正则表达式 python

python - 按 Pandas 中的一列随机排列行

python - 使用 "x *= -1."优于 "x *= -1"的优势?

python - Pygame 多个项目符号问题

程序员私有(private)服务器的 Linux 发行版

java - Android studio 配置路径无效