无法弄清楚如何在 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 上,您可以 use taskkillpsutil 【参考方案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 中杀死子进程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何定义我的 y_test

使用 mypy 进行类型检查,我无法弄清楚为啥会发生此错误 [关闭]

无法弄清楚如何在 WebService 中使用参数 MaxReceivedMessageSize

无法从数组中打印信息,无法弄清楚如何遍历存储在类中的数组?

Python 得到 SettingWithCopyWarning - iloc 与 loc - 无法弄清楚原因

我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]