Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让子进程每5秒暂停一个外部程序的执行?_Python_Signals_Subprocess - Fatal编程技术网

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()