Python subprocess模块 - Popen方法与bash find命令中的-exec
我在使用Python的subprocess模块,具体是用Popen方法。
我想要实现的目标:
我想用Popen执行一个bash命令,如果找到包含"stderr"这个字符串的文件,就返回匹配结果。
代码如下:
bash
find . -exec grep "stderr" {} +
我在Python中做的事情:
from subprocess import Popen, PIPE
command = "find . -exec grep 'stderr' {} +"
stream = Popen(command, stdout=PIPE, shell=True, cwd=dir)
stream_stdout, stream_stderr = stream.communicate()
我得到的结果:
看起来这个方法有效,因为stream_stdout和stream_stderr返回了我预期的内容,但我在屏幕上看到了一些文本:
find: missing argument to `-exec'
有没有人知道这是为什么?
*补充说明: 我在{}+之间没有加空格,这就是我之前得到那个输出的原因。抱歉!*
谢谢,
Mike
2 个回答
0
你为什么要使用subprocess模块呢?
这段代码,来自Beazley先生,能完成这个任务吗?
import os
import fnmatch
import re
def gen_find(filepat,top):
for path, dirlist, filelist in os.walk(top):
for name in fnmatch.filter(filelist,filepat):
yield os.path.join(path,name)
def grep(pat,lines):
patc = re.compile(pat)
for line in lines:
if patc.search(line): return True
for f in gen_find("*","."):
fopen = open(f, 'rb')
if grep("stderr",fopen.readlines()):
print f
0
试着把你的命令做成一个参数列表:
command = "find . -exec grep 'stderr' {} +".split(" ")
补充说明:抱歉,我没意识到Popen()可以接受一个字符串。这个回答是不正确的。