我想从日志文件中删除错误并将值保存为错误。当我使用时:
errors = os.system("cat log.txt | grep 'ERROR' | wc -l")
我得到命令工作与否的返回码。当我使用时:
errors = os.popen("cat log.txt | grep 'ERROR' | wc -l")
我得到了命令试图做的事情。
当我在命令行中运行时,我得到3,因为有多少错误。
有人可以在Python中建议另一种允许我保存此bash命令值的方法吗?
由于
答案 0 :(得分:6)
popen
已弃用。请改用subprocess。例如,在您的情况下:
p1 = Popen(["cat", "log.txt"], stdout=PIPE)
p2 = Popen(["grep", "ERROR"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
答案 1 :(得分:1)
答案 2 :(得分:1)
首先使用popen打开管道。
p = os.popen("cat log.txt | grep 'ERROR' | wc -l")
现在只需像普通文件一样访问管道:
output = p.readline()
这将是一个字符串,所以你仍然需要做一些额外的解析,但这应该不是问题。
编辑:好的,似乎从Python 2.6开始,os.popen已被弃用。因此,我将答案推迟到使用subprocess.Popen正确回答的人。谢谢你们。
答案 3 :(得分:0)
文件中有多少'ERROR'
:
nerrors = open('log.txt').read().count('ERROR') # put whole file in memory
包含'ERROR'
的行数:
nerrors = sum(1 for line in open('log.txt') if 'ERROR' in line) # line at a time
如果你必须使用文字bash行,那么在Python 2.7 +中:
from subprocess import check_output as qx
nerrors = int(qx("cat your_file.txt | grep 'ERROR' | wc -l", shell=True))
有关Python的check_output()
的实现,请参阅Capturing system command output as a string。 2.7。