Python子进程,定时延迟后杀死进程

Posted

技术标签:

【中文标题】Python子进程,定时延迟后杀死进程【英文标题】:Python subprocess, kill process after timed delay 【发布时间】:2015-05-26 23:37:25 【问题描述】:

我第一次使用 Python 和 Raspberry Pi(它是 Pi 2)并尝试触发一组定时命令。除了最后我想杀死所有进程之外,我已经弄清楚了大部分。

逻辑如下:

-- 触发一个名为“倒计时”的音频文件(.wav)

-- 触发另一个名为“dixie”的音频文件(.wav)

-- 在 dixie 播放时触发 wget 命令来触发我相机上的照片

-- 继续播放“dixie”,直到前一个 wget 执行完毕

-- wget执行完毕,停止播放“dixie”

-- 触发名为“掌声”的最终音频文件(.wav)

-- 停止所有音频

本质上,wget 是重要的,播放的音频文件只是为了在我的相机拍照时创作音乐。当 wget 完成并且掌声结束时,我想杀死所有的音频,但是“dixie”的 subprocess.Popen 命令继续播放(大约 40 秒长)。最后如何杀死这个进程?

到目前为止,这是我的代码:

import os
import time
import subprocess

subprocess.call(["aplay countdown.wav"], shell=True)
subprocess.Popen(["aplay dixie.wav"], shell=True)
subprocess.call(["wget 'http://10.5.5.9/camera/SH?t=12345678&p=%01' -O-"], shell=True)
time.sleep(5)
subprocess.call(["aplay applause.wav"], shell=True)
subprocess.Popen.kill(["aplay dixie.wav"], shell=True)

一旦“掌声”播放完毕,我想杀死“dixie”。

我的代码产生错误:

"unbound method kill() must be called with Popen instance as first
argument (got list instance instead)"

有什么建议吗?

【问题讨论】:

【参考方案1】:

我建议这样做:

proc = subprocess.Popen(["aplay dixie.wav"], shell=True)

# do something 

proc.terminate()

【讨论】:

感谢您的建议!但是,这不起作用。 “掌声”结束后,“Dixie”继续播放。

以上是关于Python子进程,定时延迟后杀死进程的主要内容,如果未能解决你的问题,请参考以下文章

Python:当父进程死亡时如何杀死子进程?

杀死 python ffmpeg 子进程会破坏 cli 输出

杀死父进程后将标准输入传递给子进程

从python中杀死一个子进程,包括它的子进程[重复]

如何在python中杀死一个分叉的孩子及其jackd子进程

当父进程死亡时,如何杀死使用 subprocess.check_output() 创建的 python 子进程?