我看到很多答案stdout=file
将重定向到文件。但我有几个问题。
为什么>file
无效。
subprocess.Popen([SCRIPT, "R", ">", FILE, "2>", "/dev/null"])
这很好吗
with open(FILE,'w+') as f:
subprocess.Popen([SCRIPT, stdout=f]
f.close()
在我的情况下,我试图在无限循环(不停止)中运行脚本,并且还有一些其他进程监视其输出。
即使f关闭后,脚本仍然会写入其中。如果是的话,它是如何运作的?
答案 0 :(得分:3)
由于subprocess
不允许使用>
从文档中重定向输出或错误消息:
stdin
,stdout
和stderr
分别指定执行程序的标准输入,标准输出和标准错误文件句柄。有效值为PIPE
,DEVNULL
,现有文件描述符(正整数),现有文件对象和None
。
PIPE
表示应创建一个新的子管道。DEVNULL
表示将使用特殊文件os.devnull
。使用默认设置None
,不会发生重定向;子项的文件句柄将从父项继承。此外,
stderr
可以是STDOUT
,表示应将应用程序中的stderr数据捕获到与stdout.
相同的文件句柄中
您应该使用以下代码:
with open(FILE, 'w+') as f:
subprocess.Popen([SCRIPT, 'R'], stdout=f, stderr=subprocess.DEVNULL))
由于您正在使用with
,因此无需关闭该文件。
答案 1 :(得分:0)
我认为你必须尝试,
with open(FILE,'w+') as f:
subprocess.Popen([SCRIPT, stdout=f, stderr=f])