我正在编写一个 python 脚本,它读取一行/字符串,调用 Unix,使用 grep 在查询文件中搜索包含该字符串的行,然后打印结果。
从子进程导入调用
for infilelines 中的行:
output = call(["grep", line, "path/to/query/file"])
print output
print line`
当我查看打印到屏幕上的结果时,我将从查询文件中获得匹配字符串的列表,但我还将获得“1”和“0”整数作为输出,并且 line
永远不会打印到屏幕上。我希望从查询文件中获取与我的字符串匹配的行,后跟我在搜索中使用的字符串。
最佳答案
调用返回进程返回码。
如果使用 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]
这将为您可以通过通信读取的标准输出打开一个管道。如果你也想要 stderr,你也需要添加“stderr=subprocess.PIPE”。
这将返回完整的输出。如果要将其解析为单独的行,请使用拆分。
output.split('\n')
我相信 Python 会为您处理行结束转换,但由于您使用的是 grep,我将假设您使用的是 Unix,行结束无论如何都是\n。
http://docs.python.org/library/subprocess.html#subprocess.check_output
关于Python subprocess to call Unix commands,一个关于输出如何存储的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437156/