我想在Python中执行此命令
grep keyMessage logFile.log > keyMessageFile.log
这就是我现在所做的
from subprocess import call
keyMessage= 'keyMessage'
call(["grep", keyMessage, "logFile.log"])
但我不知道如何添加> keyMessageFile.log
部分
顺便说一句,我使用grep的原因是因为它比使用read文件快得多然后比较字符串然后写文件
#UPDATE 我编写的python代码较慢
keyMessage= 'keyMessage'
with open('logFile.log') as f:
for line in f:
with open(keyMessage+ '.txt', 'a') as newFile:
if(keyMessage not in line):
continue
else:
newFile.write(line)
答案 0 :(得分:4)
subprocess.call
有一个参数stdout
。传递打开的文件以便写入。
with open("keyMessageFile.log", "w") as o:
keyMessage= 'keyMessage'
call(["grep", keyMessage, "logFile.log"], stdout=o)
subprocess.call
是旧API,您应该使用subprocess.run
代替。
答案 1 :(得分:4)
最简单的方法(合理安全地)是:
from subprocess import check_call
from shlex import quote
check_call('grep %s logFile.log > keyMessageFile.log' % quote(keyMessage), shell=True)
但是,除非您确实需要grep
的正则表达式匹配功能,否则您最终会在程序中阅读keyMessageFile.log
,我不认为以下内容会非常缓慢:
def read_matching_lines(filename, key):
with open(filename) as fp:
for line in fp:
if key in line:
yield line
for matching_line in read_matching_lines('logFile.log', keyMessage):
print(matching_line)
答案 2 :(得分:0)
对我而言,这有效:
import sys
os.system('grep %s logFile.log > keyMessageFile.log' % 'looking string')