[英]Python - Subprocess - How to call a Piped command in Windows?
[英]How to properly finish a (piped) python subprocess
我有这个小示例代码片段,它基本上做了一个ls | grep foo
ls | grep foo
与 python 子进程:
import subprocess
import warnings
warnings.simplefilter("always")
lhs = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
rhs = subprocess.Popen(["grep", "foo"], stdin=lhs.stdout)
lhs.stdout.close()
rhs.communicate()
最后,我收到一条警告:
“/usr/lib/python3.8/subprocess.py:942: ResourceWarning: 子进程 1519 仍在运行”
由于我的代码等效于https://docs.python.org/3.8/library/subprocess.html#replacing-shell-pipeline ,因此我很确定会做正确的事情。 那么为什么会生成这个警告,或者我可以做些什么来防止 python 在那里抱怨(除了抑制警告)?
你错过了lhs.communicate()
lhs.wait()
( communicate
也等待过程完成,但wait
更不言自明),
lhs = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
rhs = subprocess.Popen(["grep", "foo"], stdin=lhs.stdout)
lhs.stdout.close()
rhs.communicate()
lhs.wait()
但是 IMO 你应该使用更高级别的函数,比如subprocess.run
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.