我正在编写一个读取行/字符串的python脚本,调用Unix,使用grep在查询文件中搜索包含该字符串的行,然后打印结果。
from subprocess import call
for line in infilelines:
output = call(["grep", line, "path/to/query/file"])
print output
print line`
当我查看打印到屏幕上的结果时,我将从查询文件中获取匹配字符串的列表,但我也会得到“1”和“0”整数作为输出,line
是从未打印到屏幕上。我希望从查询文件中获取与我的字符串匹配的行,然后是我在搜索中使用的字符串。
答案 0 :(得分:6)
调用返回进程返回码。
如果使用Python 2.7,请使用check_output。
from subprocess import check_output
output = check_output(["grep", line, "path/to/query/file"])
如果在此之前使用任何内容,请使用沟通。
import subprocess
process = subprocess.Popen(["grep", line, "path/to/query/file"], stdout=subprocess.PIPE)
output = process.communicate()[0]
这将打开stdout的管道,你可以通过沟通阅读。如果你也想要stderr,你也需要添加“stderr = subprocess.PIPE”。
这将返回完整输出。如果要将其解析为单独的行,请使用split。
output.split('\n')
我相信Python会为你处理行结束转换,但是因为你正在使用grep我会假设你在Unix上的行结尾是\ n无论如何。
http://docs.python.org/library/subprocess.html#subprocess.check_output
答案 1 :(得分:4)
以下代码适用于Python> = 2.5:
from commands import getoutput
output = getoutput('grep %s path/to/query/file' % line)
output_list = output.splitlines()
答案 2 :(得分:0)
当Python本身可以执行此操作时,您为什么要执行对外部grep
的调用?这是额外的开销,您的代码将依赖于正在安装的grep
。这就是用“in”运算符在Python中执行简单grep
的方法。
query=open("/path/to/query/file").readlines()
query=[ i.rstrip() for i in query ]
f=open("file")
for line in f:
if "line" in query:
print line.rstrip()
f.close()