Python:启动终端程序并在其运行时解析其输出

时间:2014-09-24 00:37:25

标签: python subprocess

我正在为Ubuntu编写和AppIndicator for Popular NodeJS Server" MeteorJS"应该列出可用的项目并启动服务器,当它启动服务器时,它会得到它的终端输出并对它们做出反应。

当你启动meteor时,它会根据发生的情况提供一些输出。例如,当您更改代码时,它会输出"changed restarting..."或当您再次更改"changed restarting... (2x)"时很好,但是当它出现错误时会输出一些错误消息。

除非您的桌面上没有足够的空间来查看该终端,否则这很好。

所以我编写了一个应该以另一种方式通知我这些消息的应用程序。

我的实际问题:

我需要从python程序启动服务器,而我可以对服务器在其标准输出时写入的输出做出反应。

所以我想

  • 打开终端程序
  • 将它发送到后台以便我可以完成我的工作
  • 对其打印的每一行做出反应

2 个答案:

答案 0 :(得分:1)

您可能需要查看以下功能的线程,然后找出如何使其成为“事件驱动”。

但这就是我在后台运行bash脚本并在我对它感兴趣时获取输出的方法。

# To test it out, run the script and then turn your wifi off and on.

import subprocess


def tail():
    command = ["tail", "-f", "/var/log/wifi.log"] # your bash script execute command goes here
    popen = subprocess.Popen(command, stdout=subprocess.PIPE)
    for line in iter(popen.stdout.readline, ""):
        yield line,

logger = tail()

for line in logger:
    print line

答案 1 :(得分:0)

你可能想要一个pty。它可以从应用程序接收输出,您可以从中读取并按照您的需要进行操作。

这是一个Python示例。它只是将所有内容记录到文件中并将其发送到终端。它基本上类似于脚本(1),但带有可选的带时间戳的输出文件。 http://stromberg.dnsalias.org/~strombrg/pypty/

HTH