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