2017-05-27 136 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

相关问题