我有2个python脚本,foo.py
和bar.py
。我在后台使用
python foo.py &
现在我想运行bar.py
并使用此文件中的stdout来触发foo.py中的脚本。这可能吗?我正在使用Ubuntu 16.04 LTS。
答案 0 :(得分:2)
您可以使用UNIX named 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:与Paul的回答不同,如果你使用命名的管道,你就不必从另一个内部启动其中一个进程。
答案 1 :(得分:0)
实际上有一个系统来自UNIX世界,它在进程之间创建pipes
。管道基本上是一对文件描述符,每个程序都可以访问其中一个。一个程序写入管道,而另一个程序读取:
https://docs.python.org/2/library/subprocess.html
但是,这需要一个aditional脚本,您可以在其中启动foo和bar作为子进程并连接它们的输出/输入。