2016-09-03 2 views
2

У меня есть 2 скрипта python, foo.py и bar.py. Я бегу foo.py в фоновом режиме, используяPython фоновая оболочка сценарий связи

python foo.py & 

Теперь я хочу, чтобы запустить bar.py и использовать стандартный вывод из этого файла для запуска сценария внутри foo.py. Это возможно? Я использую Ubuntu 16.04 LTS.

ответ

2

Для этого вы можете использовать UNIX named pipe.

Сначала вы создаете именованный объект pipe, выполнив mkfifo named_pipe в том же каталоге, где у вас есть файлы python.

Ваш foo.py тогда может выглядеть следующим образом:

while True: 
    for line in open('named_pipe'): 
     print 'Got: [' + line.rstrip('\n') + ']' 

И ваш bar.py может выглядеть следующим образом:

import sys 

print >>open('named_pipe', 'wt'), sys.argv[-1] 

Таким образом, вы запустите процесс потребительскую так: python foo.py &. И, наконец, каждый раз, когда вы выполняете python bar.py Hello, вы увидите сообщение Got: [Hello] в своей консоли.

UPD: в отличие от ответа Павла, если вы используете , называемый трубой, вам не нужно запускать один из процессов изнутри другого.

0

Существует система, которая на самом деле происходит из мира UNIX, которая создает между процессами pipes. Труба в основном представляет собой пару дескрипторов файлов, каждая из которых имеет доступ к одному из них. Одна программа пишет на трубе, а другой читает:

https://docs.python.org/2/library/subprocess.html

Однако это требует сценарий, где фильме вы начинаете Foo и бар, подпроцессов и соединить их входы/выходы.