Python3.4 - 如何获取使用 Popen 启动的程序的 PID? (OS -Raspbian 杰西)
Python3.4 - How do I get the PID of a program that was started with Popen? (OS -Raspbian Jessie)
Python 3.4
OS - Raspbian Jessie 运行 Raspberry Pi 3
注意:程序“gnutv”没有停止命令。它只有一个计时器选项可以停止录制。
我的问题:
我对编程和 Python(self/YouTube/books 教过)还很陌生。我正在编写一个程序来检查系统是否有警报。当出现警报时,它会触发程序 "gnutv" 开始将视频录制到文件中。那是容易的部分。我可以启动程序,并使用
录制视频
Popen(["gnutv", "-out", "file", str(Videofile), str(Channel)])
程序会在录制视频时继续监控警报输入,以便知道何时停止录制。但是当警报不再存在时,我无法让它停止录制。我曾尝试使用 kill()、terminate() 和其他命令但没有成功(所有 returned 错误表明我不知道如何使用这些更复杂的命令)。 但是,我可以通过切换到终端并使用
查找PID来终止进程
pidof 'gnutv'
然后用
杀死它
kill PID#
那么我怎样才能 return 我从 从 终端获得的 PID 值,这样我就可以发送 kill 命令 到 终端(再次使用 Popen)?
即 - Popen(['kill', 'PID#'])
您不需要 运行 kill
程序本身,您只需在 Popen
对象上调用 .kill()
或 .terminate()
。
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
.
提供的包装器调用
Python 3.4
OS - Raspbian Jessie 运行 Raspberry Pi 3
注意:程序“gnutv”没有停止命令。它只有一个计时器选项可以停止录制。
我的问题: 我对编程和 Python(self/YouTube/books 教过)还很陌生。我正在编写一个程序来检查系统是否有警报。当出现警报时,它会触发程序 "gnutv" 开始将视频录制到文件中。那是容易的部分。我可以启动程序,并使用
录制视频Popen(["gnutv", "-out", "file", str(Videofile), str(Channel)])
程序会在录制视频时继续监控警报输入,以便知道何时停止录制。但是当警报不再存在时,我无法让它停止录制。我曾尝试使用 kill()、terminate() 和其他命令但没有成功(所有 returned 错误表明我不知道如何使用这些更复杂的命令)。 但是,我可以通过切换到终端并使用
查找PID来终止进程pidof 'gnutv'
然后用
杀死它kill PID#
那么我怎样才能 return 我从 从 终端获得的 PID 值,这样我就可以发送 kill 命令 到 终端(再次使用 Popen)?
即 - Popen(['kill', 'PID#'])
您不需要 运行 kill
程序本身,您只需在 Popen
对象上调用 .kill()
或 .terminate()
。
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
.