我正在做os.system
以查找实时文件,grep
表示字符串
当grep成功时,如何执行某些操作?
例如
cmd= os.system(tail -f file.log | grep -i abc)
if (cmd):
#Do something and continue tail
我有什么方法可以做到这一点?当os.system语句完成时,它只会进入if
块。
答案 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)
我不确定您是否真的需要在python中执行此操作 - 也许将tail-f
输出管道输入awk会更容易:https://superuser.com/questions/742238/piping-tail-f-into-awk
如果您想在python中工作(因为之后需要进行一些处理),请查看此链接,了解如何使用tail -f
:How can I tail a log file in Python?