无法弄清楚如何在 Python 3.5 中杀死子进程 [重复]
Posted
技术标签:
【中文标题】无法弄清楚如何在 Python 3.5 中杀死子进程 [重复]【英文标题】:Can't figure out how to kill subprocess in Python 3.5 [duplicate] 【发布时间】:2015-12-28 14:49:08 【问题描述】:我正在使用 Python 3.5。我正在启动 ffmpeg 来记录文件,但我似乎无法终止该进程。我试过这个:
import os
import subprocess
pro = subprocess.Popen(recordcommand, shell=True)
...
do some things; wait for a stop command to come in
...
if msg =='STOP':
pro.kill()
我的进程开始正常,但从未停止。我没有收到任何错误。我检查了 API 并认为我做对了。谁能告诉我哪里出错了?谢谢!
编辑:将 pro.kill 修复为 pro.kill() 但仍然无法正常工作。这是我要发送的命令:
C:/Users/User/Desktop/ffmpeg-20150928-git-235381e-win64-static/bin/ffmpeg.exe -f dshow -crossbar_video_input_pin_number 2 -i video="ATI AVStream Analog Capture" -f mpegts -fs 16777216 -y D:\Media\tvrecordings\SageSlingBox1onlocalhost4510TVTuner-0.mpgbuf 2>NUL
也许有什么东西阻止了它被杀死?我忘了说我的操作系统是 Win 7 64 位。
【问题讨论】:
您正在杀死父进程而不是子进程,即外壳。对windows不太熟悉,但是用shell=False传递一个args列表可能会起作用,如果不是你可以taskill或win32process 谢谢。不幸的是,我是一个非常新手的“程序员”。你能告诉我我是怎么杀壳的吗? 你正在杀死shell,你需要杀死进程。尝试将 args 作为列表中的单个 args 传递并删除 shell=True,如果你想要一个简单的解决方案,如果不只是使用 check_call 杀死 ffmpeg 和 taskill 在 Windows 上,您可以 usetaskkill
或 psutil
。
【参考方案1】:
如果你试图杀死某个进程,试试这个:
import subprocess
import sys
proc = subprocess.Popen(
['sudo', 'kill', args], stdin=subprocess.PIPE)
proc.communicate(sys.argv[1])
【讨论】:
【参考方案2】:kill 是一个函数,因此必须调用它来执行任何操作。
尝试将其更改为:
if msg =='STOP':
pro.kill()
【讨论】:
afaik , iirc 只能在 *nix 中工作 .. 但是是的,这肯定是他的问题(但它仍然可能不会杀死进程 ... ,但这将是一个不同的问题 +1这个答案) 我做了那个更正,但它仍然没有用。我用其他信息更新了我的问题。感谢您的回答,但仍然无法正常工作。以上是关于无法弄清楚如何在 Python 3.5 中杀死子进程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 mypy 进行类型检查,我无法弄清楚为啥会发生此错误 [关闭]
无法弄清楚如何在 WebService 中使用参数 MaxReceivedMessageSize