4

外部プログラムが与えられた場合、この例ではpython target.py次のようになります。

target.py

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

コマンドを実行する方法を探しています。これは、開始と停止以外に制御できないと想定できるコマンドを 5 秒間実行する方法です。その時点で、実行を一時停止し (ターゲット プラットフォームである Linux の場合と同様control-Z)、内部コードを実行してから、サブプロセスの実行を続行します。これまでのところ、私は持っています

リーダー.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 に答える