在这种情况下,为什么stdout打印出一个空字符串?

时间:2017-05-27 20:45:13

标签: python-3.x subprocess stdout

我正在阅读有关子进程和使用某些代码的内容。 我正在使用Windows 7和Python3.6

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 个答案:

答案 0 :(得分:1)

子进程基本上就像在终端中运行该命令一样。

所以你正在做的就是跑步 class Share(models.Model): example = models.ForeignKey(Example, related_name='shares') ... 它只是在记事本中打开一个文件,但它不会向标准输出发送任何内容。

如果您运行的命令将某些内容写入标准输出,那么您将拥有一个非空的stdout1。例如,如果您使用的是* nix系统,请尝试notepad some_file.txt;如果是在Windows上,请尝试ls