2017-05-27 131 views
0

我正在閱讀關於子過程並玩弄一些代碼。 我使用Windows 7 Python3.6爲什麼在這種情況下stdout輸出空字符串?

import subprocess 


process = subprocess.Popen(['notepad', 'C:\\Users\Amit\Downloads\InsiderTrades.txt'],stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
#I'm opening a text file which has a list of stock tickers 

stdout1, stderr1 = process.communicate() 
print(stdout1.decode('ASCII')) 

我得到的輸出是什麼或者

b''作爲stdout1值。

我「不十分清楚什麼communicate在這種情況下輸出。 我的印象是,它將輸出從我的文本文件中的文本或將它輸出任何東西我輸入到文本文件下。

我試着輸入到新打開的文本文件爲好,但我仍然得到同樣的輸出,b''

那麼我得到一個空字符串,儘管輸入的東西到新開的文本文件。

+1

如果您在cmd控制檯中鍵入該命令,它將打開記事本並不打印任何內容。這裏也是一樣。 –

+1

不清楚你期望做什麼,但記事本並不真正接受來自標準輸入的輸入,也不輸出到標準輸出。這是一個GUI程序。 – pvg

回答

1

子過程基本上就好像你運行那個com終端中的命令。

所以你在做什麼是運行 notepad some_file.txt 它只是在記事本中打開一個文件,但它不會發送任何東西到標準輸出。

如果您運行將某些內容寫入標準輸出的命令,那麼您將擁有一個非空stdout1。例如,如果您在* nix系統上,請嘗試ls;如果在Windows上,則嘗試dir

+0

感謝您的澄清。我將在Windows系統上嘗試'dir'。 – Moondra

+0

好的。它似乎與'dir'一起工作。我想我已經開始理解subprocess和stdin以及stdout如何工作了。 – Moondra

相關問題