从Python脚本我想在新线程中打开vlc并允许用户干净地关闭它(仍然来自这个脚本)。似乎send_signal()指令实际上并没有关闭vlc,我做错了什么?
import subprocess
import signal
s = subprocess.Popen("vlc", shell=True)
raw_input("Press Enter to stop vlc...")
s.send_signal(signal.SIGINT)
print "waiting for vlc to exit..."
s.wait()
编辑:我替换了vlc用于测试/说明目的,但我真正的需要是结束由ffmpeg记录的流,这通常是在监听SIGINT,因为这是退出的标准信号(它说"按ctrl- c停止编码")。
答案 0 :(得分:1)
SIGINT通常保留用于Ctrl-C中断。在GUI应用程序中可能会忽略它。发送到正常终止应用程序的正确信号是SIGTERM,或SIGKILL突然终止它。
但是使用子进程模块,您可以(应该)直接调用子进程对象的方法terminate
或kill
。
答案 1 :(得分:0)
vlc
可能忽略了信号。尝试发送SIGTERM
或SIGKILL
。
有关Unix终止信号的更多详细信息,请参阅this link(假设您在Unix / Linux下运行。)请参阅可以阻止和/或忽略哪些信号的说明。
答案 2 :(得分:0)
好的,我终于用
来缩短外壳s = subprocess.Popen(["vlc"])
现在发送SIGINT / SIGKILL实际上会关闭进程。我没有解释为什么使用shell的第一个选项不起作用。