Python 3.4
操作系统 - Raspbian Jessie 在 Raspberry Pi 3上运行
我的问题: 我仍然是编程和Python(自我/ YouTube /书籍教学)的新手。我正在编写一个程序来检查系统是否有警报。当出现警报时,它会触发程序" gnutv"开始将视频录制到文件中。这很容易。我可以启动程序,并使用
录制视频Popen(["gnutv", "-out", "file", str(Videofile), str(Channel)])
程序会在录制视频时继续监听闹钟输入,以便知道何时停止录制。但是当警报不再存在时,我无法停止录制。我试图使用kill(),terminate()和其他没有成功(所有返回的错误表明我不知道如何使用这些更复杂的命令)。 HOWEVER ,我 CAN 通过切换到终端并使用
查找PID来终止进程pidof 'gnutv'
然后用
杀死它kill PID#
那么如何从终端返回的PID值,这样我就可以将kill命令发送到终端(再次使用Popen)?
即 - Popen(['kill', 'PID#'])
答案 0 :(得分:2)
您无需自行运行kill
程序,只需在.kill()
对象上调用.terminate()
或Popen
即可。
import subprocess
proc = subprocess.Popen(['gnutv', '-out', 'file', str(Videofile), str(Channel)])
# Some time later...
# This is equivalent to running "kill <pid>"
proc.terminate()
# This is equivalent to running "kill -9 <pid>"
proc.kill()
如果你真的需要pid(提示:你没有),你也可以从对象中获取它,它存储在pid
属性中。
print('Spawned gnutv (pid={})'.format(proc.pid))
你真的应该不运行kill
程序,因为该程序首先只是kill()
函数的包装器。只需直接调用函数,或通过subprocess
提供的包装器。