Как заставить os.mkfifo и subprocess.Popen работать вместе? - PullRequest
0 голосов
/ 20 января 2010

Я пытаюсь перенаправить вывод команды patch , используя именованный канал. Я пытался так:

fifo = os.path.join(self.path, 'pipe')
os.mkfifo(fifo)
op = os.popen('cat '+ fifo)
proc = Popen(['patch', current_keyframe, '--input='+fpath, '--output='+fifo], stdin=PIPE, stdout=PIPE)
os.unlink(fifo)
print op.read()

Но мой сценарий останавливается на Вызов Popen () , как и команда patch не выполнена. Как я могу заставить его работать должным образом?

1 Ответ

1 голос
/ 20 января 2010

Вы не ждете окончания команды исправления, прежде чем начнете читать с fifo. Замените вызов subprocess.Popen() на subprocess.call() и удалите перенаправления stdin / stdout, которые вы не используете. Также используйте open(fifo) для чтения с fifo, а не os.popen('cat ' + fifo).

Вы понимаете, я надеюсь, что вы можете полностью избежать FIFO? После p = Popen(['patch', '--input', fpath], stdout=PIPE) вы можете просто прочитать вывод патча из p.stdout.

...