存储os.system或os.popen的返回值
我想从一个日志文件中提取错误信息,并把这些错误保存起来。当我使用:
errors = os.system("cat log.txt | grep 'ERROR' | wc -l")
我得到的是这个命令是否成功执行的返回码。当我使用:
errors = os.popen("cat log.txt | grep 'ERROR' | wc -l")
我得到的是这个命令想要做什么。
当我在命令行运行这个时,我得到了3,因为日志里有3个错误。
有没有人能建议一种在Python中实现的方法,让我可以保存这个bash命令的结果?
谢谢!
4 个回答
1
2
首先,像你之前那样使用popen打开一个管道。
p = os.popen("cat log.txt | grep 'ERROR' | wc -l")
现在就像处理普通文件一样访问这个管道:
output = p.readline()
这会得到一个字符串,所以你还需要做一些额外的解析,但这应该不成问题。
编辑:好的,看来从Python 2.6开始,os.popen已经不推荐使用了。因此,我把我的回答留给那些正确使用subprocess.Popen的人。谢谢你们。
6
popen
这个东西已经不推荐使用了。建议你用subprocess来代替。比如,在你的情况中:
p1 = Popen(["cat", "log.txt"], stdout=PIPE)
p2 = Popen(["grep", "ERROR"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]