Python 如何让子进程每5秒暂停一个外部程序的执行?
给定一个外部程序,在本例中为Python 如何让子进程每5秒暂停一个外部程序的执行?,python,signals,subprocess,Python,Signals,Subprocess,给定一个外部程序,在本例中为python target.py: target.py 我正在寻找一种方法来运行这个命令,我们可以假设我除了启动和停止之外没有其他控制权,持续5秒钟。此时,我想暂停执行(类似于我的目标平台linux上的control-Z),运行一些内部代码,然后继续执行子流程。到目前为止,我已经 reader.py 由于您在Linux上,因此可以使用以下reader.py: import subprocess, signal, time, os cmd = "python targ
python target.py
:
target.py
我正在寻找一种方法来运行这个命令,我们可以假设我除了启动和停止之外没有其他控制权,持续5秒钟。此时,我想暂停执行(类似于我的目标平台linux上的control-Z
),运行一些内部代码,然后继续执行子流程。到目前为止,我已经
reader.py
由于您在Linux上,因此可以使用以下reader.py:
import subprocess, signal, time, os
cmd = "python target.py"
P = subprocess.Popen(cmd,shell=True)
while True:
time.sleep(5)
os.kill(P.pid, signal.SIGSTOP)
print "doing something"
os.kill(P.pid, signal.SIGCONT)
您还可以使用psutil并避免使用看起来吓人的os.kill:
import psutil, time, subprocess
cmd = "python target.py"
P = subprocess.Popen(cmd,shell=True)
psProcess = psutil.Process(pid=P.pid)
while True:
time.sleep(5)
psProcess.suspend()
print 'I am proactively leveraging my synergies!'
psProcess.resume()
我们可以使用子流程的
send_signal
功能
import subprocess
import signal
import time
p = subprocess.Popen(['mpg123', '-C', 'music.mp3'])
time.sleep(3)
print('stop')
p.send_signal(signal.SIGSTOP)
time.sleep(3)
print('continue')
p.send_signal(signal.SIGCONT)
time.sleep(3)
p.terminate()
@MichaelHerrmann这是一个疑问,但这需要在Linux机器上运行(特别是Ubuntu,尽管我不确定这会有什么不同)。下面是我的答案:)谢谢你!但是wtf,向进程发送信号的命令是在
os.kill
下的。请注意,如果使用参数shell=True
打开某些命令(如mpg123),则无法停止这些命令。改用subprocess.Popen(['mpg123','audio.mp3'])
。
import psutil, time, subprocess
cmd = "python target.py"
P = subprocess.Popen(cmd,shell=True)
psProcess = psutil.Process(pid=P.pid)
while True:
time.sleep(5)
psProcess.suspend()
print 'I am proactively leveraging my synergies!'
psProcess.resume()
import subprocess
import signal
import time
p = subprocess.Popen(['mpg123', '-C', 'music.mp3'])
time.sleep(3)
print('stop')
p.send_signal(signal.SIGSTOP)
time.sleep(3)
print('continue')
p.send_signal(signal.SIGCONT)
time.sleep(3)
p.terminate()