我看过很多答案stdout=file
将重定向到一个文件。但我有几个疑问。
-
为什么不>file
work.
subprocess.Popen([SCRIPT, "R", ">", FILE, "2>", "/dev/null"])
-
这样可以吗
with open(FILE,'w+') as f:
subprocess.Popen([SCRIPT, stdout=f]
f.close()
就我而言,我尝试在无限循环中运行脚本(不会停止),并且有一些其他进程监视其输出。
即使 f 关闭后,脚本是否仍继续写入其中。如果是,它是如何运作的?
Because subprocess https://docs.python.org/3/library/subprocess.html#subprocess.Popen不允许使用>
从文档中既不重定向输出也不重定向错误消息:
stdin
, stdout
and stderr
分别指定执行程序的标准输入、标准输出和标准错误文件句柄。有效值为PIPE
, DEVNULL
、一个现有的文件描述符(正整数)、一个现有的文件对象,以及None
.
PIPE
指示应创建一个通往子级的新管道。DEVNULL
表示特殊文件os.devnull
将会被使用。默认设置为None
,不会发生重定向;子级的文件句柄将从父级继承。
此外,stderr
can be STDOUT
,这表明来自应用程序的 stderr 数据应该被捕获到与stdout.
并且您应该使用以下代码:
with open(FILE, 'w+') as f:
subprocess.Popen([SCRIPT, 'R'], stdout=f, stderr=subprocess.DEVNULL))
因为你正在使用with
,所以不需要关闭文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)