从python中的shell命令获取返回值

时间:2015-05-09 04:20:38

标签: python shell unix

我正在做os.system以查找实时文件,grep表示字符串 当grep成功时,如何执行某些操作? 例如

cmd=  os.system(tail -f file.log | grep -i abc)
if (cmd):     
         #Do something and continue tail

我有什么方法可以做到这一点?当os.system语句完成时,它只会进入if块。

2 个答案:

答案 0 :(得分:0)

您可以使用subprocess.Popen并从stdout中读取行:

import subprocess

def tail(filename):
    process = subprocess.Popen(['tail', '-F', filename], stdout=subprocess.PIPE)

    while True:
        line = process.stdout.readline()

        if not line:
            process.terminate()
            return

        yield line

例如:

for line in tail('test.log'):
    if line.startswith('error'):
        print('Error:', line)

答案 1 :(得分:0)

  1. 我不确定您是否真的需要在python中执行此操作 - 也许将tail-f输出管道输入awk会更容易:https://superuser.com/questions/742238/piping-tail-f-into-awk

  2. 如果您想在python中工作(因为之后需要进行一些处理),请查看此链接,了解如何使用tail -fHow can I tail a log file in Python?