python 2.3如何运行管道命令

时间:2012-07-30 11:14:50

标签: python python-2.3

我想运行这样的命令

grep -w 1 pattern <(tail -f mylogfile.log)

基本上来自python脚本我想监视特定字符串的日志文件,并在我发现后立即继续使用python脚本。
我正在使用os.system(),但这是悬而未决的。 bash中的相同命令效果很好。

我有一个非常旧版本的python(v2.3),因此没有子进程模块。

我们有办法实现这个

3 个答案:

答案 0 :(得分:1)

在Python 2.3中,您需要使用subprocess from SVN

import subprocess
import shlex
subprocess.call(shlex.split("/bin/bash -c 'grep -w 1 pattern <(tail -f mylogfile.log)'"))

要明确,您需要从上面的SVN链接安装它。

由于您正在使用的shell重定向

,您需要使用/bin/bash -c来调用它

<小时/> 的修改

如果要使用os.system()解决此问题,只需将命令包装在/bin/bash -c中,因为您正在使用shell重定向...

os.system("/bin/bash -c 'grep -w 1 pattern <(tail -f mylogfile.log)'")

答案 1 :(得分:0)

首先,我认为你应该使用的命令是grep -w -m 1 'pattern' <(tail -f in)

要在python中执行命令,请使用子进程模块中的Popen构造函数。了解更多信息 http://docs.python.org/library/subprocess.html

答案 2 :(得分:-1)

如果我理解正确,你想将输出发送到python,就像这样 -

tail -f mylogfile.log | grep -w 1 pattern | python yourscript.py

即,读取日志文件的所有更新,并将匹配行发送到您的脚本。

要从标准输入读取,您可以使用类似文件的对象:sys.stdin。

所以你的脚本看起来像

import sys

for line in sys.stdin.readlines():
    #process each line here.