Python后台shell脚本通信

时间:2016-09-03 00:28:54

标签: python shell background-process

我有2个python脚本,foo.pybar.py。我在后台使用

运行foo.py.
python foo.py &

现在我想运行bar.py并使用此文件中的stdout来触发foo.py中的脚本。这可能吗?我正在使用Ubuntu 16.04 LTS。

2 个答案:

答案 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作为子进程并连接它们的输出/输入。