我有一个Python代码,可以监听和检测环境声音。这不是我的项目,我在网上找到的(SoPaRe)。使用该./sopare.py -l
命令,它开始录制声音,但无限循环。当我想停止它时,我必须按Ctrl+C。
我的目的是在10秒后自动停止这个程序,但是当我与作者交谈时,他说该程序没有时间限制器。
我试图通过 杀死它kill PID
,但PID
每次程序运行时都会发生变化。如何在一段时间间隔后停止它bash
?
或者,我可以使用命令从 python 执行此命令os.system()
。
答案1
最简单的解决方案是使用timeout
GNU coreutils 集合(可能默认安装在大多数 Linux 系统上):
timeout 10 ./sopare.py -l
有关更多选项,请参阅该实用程序的手册 ( man timeout
)。在非 GNU 系统上,可以像gtimeout
安装 GNU coreutils 一样安装此实用程序。
如果 GNU coreutils 不可用,另一种选择是在后台启动该进程并等待 10 秒,然后再向其发送终止信号:
./sopare.py -l &
sleep 10
kill "$!"
$!
将是最近启动的后台进程的进程 ID,在本例中是 Python 脚本。
如果等待时间用于其他事情:
./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"
答案2
试试这个 bash 脚本:
#! /bin/bash
./soapre.py -l
PID=`ps u | awk ' $11 == "./soapre.py" { print $2 }'`
sleep 10
kill $PID
我假设该sleep 10
命令仅暂停 bash 脚本,而该soapre.py
脚本仍在后台运行。另外,也许您的COMMAND
ofps u
列的值与 不同"./soapre/py"
。自己进行简单的修复,但这应该可行。