没有重定向的标准输出

时间:2016-04-22 07:44:26

标签: python subprocess stdout

我有以下代码的这部分:

p = subprocess.Popen(['C:/Python27/python.exe', '-m', 'robot', '-d', logs_directory, input_file], stdout=subprocess.PIPE)
for line in iter(p.stdout.readline, ''):
    output = sys.stdout.write(line)
    #sys.stdout.write(line)
print "\n\n"
print "************************************************"
print  output
print "\n\n"
print "************************************************"
print "\n\n"

但是'输出'控制台中的变量显示'无'

************************************************
None



************************************************

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

sys.stdout.write(line)返回写在stdout上的字符数。

你可以像这样编写你的循环:

output = ""
for line in iter(p.stdout.readline, ''):
    output += line
    sys.stdout.write(line)

imho你也可以删除sys.stdout.write(line)部分。但是我不知道你的意图是什么......所以...

答案 1 :(得分:1)

尝试使用output += line代替output = sys.stdout.write(line)

答案 2 :(得分:0)

您也可以尝试使用check_output函数。

以下是一个例子:

>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'

您可以尝试:

cmd = ['C:/Python27/python.exe', '-m', 'robot', '-d', logs_directory, input_file]
output = subprocess.check_output(cmd)
print output

在大多数情况下,它可以简单地完成工作。

有关详细信息,您可能需要参考subprocess.check_output