2013-06-27 5 views
1

Я пытаюсь создать простую программу, которая запустит дочерний процесс, который записывает строку в канал, пока родительский процесс рассчитывает до тех пор, пока не получит строку из канала. Однако моя проблема заключается в том, что при запуске программы она не будет считаться или не будет считаться. Я хочу знать, как я могу проверить, работает ли дочерний процесс, и в зависимости от того, что происходит из цикла подсчета.Разрыв цикла при завершении дочернего процесса

import os, time 

pipein, pipeout = os.pipe() 

def child(input, pipeout): 
    time.sleep(2) 
    msg = ('child got this %s' % input).encode() 
    os.write(pipeout, msg) 

input = input() 

pid = os.fork() 
if pid: 
    i = 0 
    while True: 
     print(i) 
     time.sleep(1) 
     i += 1 
     try: 
      os.kill(pid, 0) 
     except OSError: 
      break 
    line = os.read(pipein, 32) 
    print(line) 
else: 
    child(input, pipeout) 

ответ

1

Вы должны использовать subprocess модуль, а затем вы можете позвонить poll()

использовать popen.poll()

Explained here

if Popen.poll() is not None: 
    //child process has terminated 

[править]:

«Единственный способ контролировать вход и выход st reams, а также получить коды возврата - использовать модуль подпроцесса; они доступны только на Unix.»

Source

+0

' poll' вернет None, если этот процесс не прекращается, и это состояние выхода, если он имеет. Проверка '<0' не имеет никакого смысла. – mata

+0

Ну Я не использую подпроцесс, поэтому мне это не помогает – Sebastian

+0

@mata код для завершенных процессов - это отрицательное число, вы можете проверить конкретный код, если хотите – Stephan

Смежные вопросы