并非所有输出都被重定向到Python中的文件中

时间:2015-05-12 20:47:33

标签: python

我正在尝试将所有stdout重定向到文件out.txt。但是第一个命令的输出显示在终端上,其余命令输入到文件中。我不确定下面的代码中是否有错误。

limitTo

1 个答案:

答案 0 :(得分:0)

将文件对象分配给sys.stdout会重定向使用sys.stdout的python代码,但不会重定向使用基础文件描述符的代码。

os.system("date")

生成一个使用底层文件描述符的新进程,因此不会重定向。

exe_cmd = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output, err = exe_cmd.communicate()
print output #Second command

使用父进程读取的管道生成一个新进程。 print使用父sys.stdout,因此会重定向。

重定向的标准方法是将文件对象传递给subprocess个调用之一。孩子在没有父母互动的情况下直接写入文件。

with open('out.txt', 'w') as f:
    cmd = ["ls", "-al"]
    subprocess.call(cmd, stdout=f)