Python subprocess to call Unix commands,一个关于输出如何存储的问题

标签 python unix call subprocess

我正在编写一个 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/

相关文章:

由 NodeJS fork 的 Python 进程 - Python 的 process.send() 的替代方案?

python - 使用 oauth 的 Twitter 身份验证问题?

bash - 检查是否安装了正确版本的 Flex 和 Bison

使用硬链接(hard link)的 Python 写时复制

java - 指定秒内的最大线程调用数

java - 无法在java中调用方法

python - 如何在 Selenium webdriver Firefox 中获取来自 `driver.page_source` 的 HTTP 请求的原始 JSON 响应

python - 从列表列表创建唯一值的频率表

c - fork 没有在母亲身上显示 child 的 pid

c - C语言中如何调用void函数