2016-04-22 198 views
0

我有下面這部分代碼:無在重定向標準輸出

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 



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

我做錯的是什麼?

+0

相關:Python的子進程讓孩子的輸出到文件和終端?](http://stackoverflow.com/q/4984428/4279) – jfs

回答

3

sys.stdout.write(line)返回寫在標準輸出上的字符數。

你可以寫你的循環是這樣的:

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

恕我直言,你還可以去除sys.stdout.write(line)部分。但我不知道你是爲了用它使該怎麼辦...

+0

是的,課程。那是我的蹩腳,是不是:) – user2678074

+1

不客氣:) – salomonderossi

+0

sys.stdout.write(line)確實會返回一個值。它返回寫在標準輸出上的字符數。 – bashrc

1

嘗試的output += line代替output = sys.stdout.write(line)

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

+0

正確,但我也想打印結果到控制檯,在這種情況下check_output是不夠的。 – user2678074

+0

我不明白你爲什麼認爲'check_output'是不夠的。您只需將其返回值分配給一個變量,然後打印到控制檯。 – dokelung

+0

這不會是'實時'打印。當子進程結束時,我會得到控制檯輸出。我想有控制檯輸出,所以我可以看到進展sof子流程 – user2678074