首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使子进程每5秒挂起外部程序的执行?

如何使子进程每5秒挂起外部程序的执行?
EN

Stack Overflow用户
提问于 2013-09-24 14:39:40
回答 3查看 9.9K关注 0票数 5

给出一个外部程序,在本例中是python target.py

target.py

代码语言:javascript
复制
import time, itertools
A = itertools.count()
while True:
    time.sleep(.1)
    print A.next()

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

reader.py

代码语言:javascript
复制
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?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-24 15:03:38

由于您是在Linux上,所以可以使用以下reader.py:

代码语言:javascript
复制
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)
票数 9
EN

Stack Overflow用户

发布于 2014-11-19 00:50:03

您也可以使用psutil并避免可怕的os.kill:

代码语言:javascript
复制
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()
票数 14
EN

Stack Overflow用户

发布于 2018-03-28 02:35:37

我们可以使用子进程的send_signal函数。

代码语言:javascript
复制
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()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18984666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档