没有Python子进程的输出

时间:2016-07-15 18:04:07

标签: python windows shell python-3.x subprocess

我正在使用Python 3.5.1和Windows 10.我无法将subprocess输出到屏幕上。让我们从简单的事情开始:

import subprocess
process = subprocess.run('echo hi', shell=True, stdout=subprocess.PIPE)

当我运行我的python模块时,我想在Python Shell中打印'hi'。该脚本运行并且不会返回错误,但它不会向屏幕输出任何内容。

我也尝试了许多不同风格的subprocess(即Popen),但仍然没有运气。我觉得这与我的Windows / Python环境设置方式有关,但我真的不知道从哪里开始。想法?

更新

所以我现在明白我的原始代码示例不应该在屏幕上放任何东西;但是,当我跑步时

import subprocess
p = subprocess.run('echo hi', shell=True)

我没有输出。我跑的时候:

import subprocess
p = subprocess.run('echo hi', shell=True, stdout=subprocess.PIPE)
print(p.stdout)

我确实得到输出。为什么第一个例子不起作用?

1 个答案:

答案 0 :(得分:4)

由于您要将输出重定向到PIPE,因此无法打印到屏幕上。删除管道参数,输出将转到正常stdout

您也可以使用subprocess.call

subprocess.call('echo hi', shell=True)

如果要管道输出,则应使用Popen代替

process = subprocess.Popen('echo hi' shell=True, stdout=subprocess.PIPE)
process.wait()
print process.stdout.read()