4

给定一个外部程序,在这个例子中是python target.py

目标.py

import time, itertools
A = itertools.count()
while True:
    time.sleep(.1)
    print A.next()

我正在寻找一种运行命令的方法,我们可以假设除了启动和停止之外我无法控制 5 秒。那时,我想暂停执行(类似于control-Z在 linux 上,这是我的目标平台),运行一些内部代码,然后继续执行子进程。到目前为止我有

阅读器.py

import subprocess, signal, time

cmd = "python target.py"
P = subprocess.Popen(cmd,shell=True)

while True:
   time.sleep(5)
   signal.pause(P)  # Not the correct way to suspend P
   print "doing something"
   signal.wakeup(P) # What is called here?
4

3 回答 3

12

您还可以使用 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()
于 2014-11-19T00:50:03.040 回答
7

由于您在 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)
于 2013-09-24T15:03:38.570 回答
4

我们可以使用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()
于 2018-03-28T02:35:37.533 回答