Skip to main content
 首页 » 编程设计

Python 调用 grep 失败

2025年05月04日11mengfanrong

我想在 Python 中执行这个命令

grep keyMessage logFile.log > keyMessageFile.log 

这是我现在做的

from subprocess import call 
 
keyMessage= 'keyMessage' 
call(["grep", keyMessage,  "logFile.log"]) 

但我不知道如何添加 > keyMessageFile.log 部分

顺便说一句,我使用grep的原因是因为它比使用读取文件然后比较字符串然后写入文件要快得多

#更新 有我写的比较慢的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) 

请您参考如下方法:

最简单的方法(也相当安全)是:

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)