Как запустить подпроцесс, который работает в фоновом режиме, пока не получит изящное завершение? - PullRequest
1 голос
/ 03 января 2012

В моем скрипте Python я хочу запустить другой скрипт Python, который будет работать в фоновом режиме в ожидании завершения инструкции.

  1. Хост-сценарий Python (H1) запускает подпроцесс P1.
  2. P1 выполняет некоторую непродолжительную работу и возвращает часового, указывающего, что он сейчас переходит в режим ожидания в ожидании инструкций для завершения.1006 *
  3. H1 опрашивает этого стража несколько раз.Когда он получает дозорного, он выполняет какую-то другую задачу, связанную с вводом-выводом, и, когда она завершается, говорит P1 изящно умереть (что означает закрытие всех ресурсов, которые вы приобрели).

Возможно ли это сделать с подпроцесс модуль?

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Да, запустите процесс с:

p=subprocess.Popen([list for the script to execute], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

Затем вы можете прочитать из p.stdout и p.stderr, чтобы найти вашего дозорного, и написать в p.stdin, чтобы отправить сообщения дочернему процессу.Если вы работаете в системе posix, вы можете вместо этого использовать pexpect;он не поддерживает MS Windows, но он лучше взаимодействует с дочерними процессами, чем подпроцесс.

1 голос
/ 04 января 2012
"""H1"""
from multiprocessing import Process, Pipe
import sys

def P1(conn):
    print 'P1: some short lived work'
    sys.stdout.flush()
    conn.send('work done')
    # wait for shutdown command...
    conn.recv()
    conn.close()
    print 'P1: shutting down'

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=P1, args=(child_conn,))
    p.start()
    print parent_conn.recv()
    print 'H1: some other IO bound task'
    parent_conn.send("game over")
    p.join()

Выход:

P1: some short lived work
work done
H1: some other IO bound task
P1: shutting down
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...