在后台运行程序,然后使用子进程打开另一个程序

时间:2019-08-01 20:17:31

标签: python subprocess

在终端上,我有两个要使用子进程运行的程序

首先,我将调用./matrix-odas &,以便第一个程序将在后台运行,然后键入第二个命令。第一条命令将返回一些消息。

第二个命令~/odas/bin/odaslive -vc ~/odas/config/odaslive/matrix_creator.cfg将打开第二个程序,它将继续运行并继续打印文本。我想使用子流程打开这些程序并捕获两个输出。

在教程之前和之后,我从未使用过子过程,我在Jupyter笔记本(python 3.7)上编写脚本是为了轻松查看输出。

from subprocess import Popen, PIPE
p = Popen(["./matrix-odas", "&"], stdout=PIPE, stderr=PIPE, cwd=wd, universal_newlines=True)
stdout, stderr = p.communicate()
print(stdout)

这是我尝试打开第一个程序的代码。但是Jupyter笔记本始终卡在p.communicate()上,我看不到任何消息。如果不在后台运行第一个程序,则在打印消息后将无法获得命令提示符。

我想知道应该使用哪个子流程函数来解决此问题,以及哪个平台更适合测试子流程代码。任何建议将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:0)

在此示例中,this section of the docs

with Popen(["ifconfig"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())

看起来您可以直接从对象访问stdout(我假设是stderr)。我不确定是否需要使用Popen作为上下文管理器来访问该属性。

相关问题