None 在重定向的标准输出中

None in redirected 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"

但控制台中的 'output' 变量显示 'none'

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



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

我做错了什么?

sys.stdout.write(line) returns stdout 上写入的字符数。

你可以这样写你的循环:

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

恕我直言,您也可以删除 sys.stdout.write(line) 部分。但是我不知道你打算用它做什么所以...

尝试 output += line 而不是 output = sys.stdout.write(line)

您也可以尝试函数 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