0

我想运行这样的命令

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

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

我有一个非常旧版本的 python (v2.3),所以没有子流程模块。

我们有办法实现这个吗

4

3 回答 3

1

在 Python 2.3 中,需要使用subprocessfrom SVN

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

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

/bin/bash -c由于您使用的 shell 重定向,您需要调用它


编辑

如果你想用 解决这个问题os.system(),只需将命令包装进去,/bin/bash -c因为你使用的是 shell 重定向......

os.system("/bin/bash -c 'grep -w 1 pattern <(tail -f mylogfile.log)'")
于 2012-07-30T11:24:56.063 回答
0

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

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

于 2012-07-30T11:24:43.787 回答
-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.
于 2012-07-30T11:23:48.373 回答