Python os.system grep与bash grep产生不同的结果

9 浏览
0 Comments

Python os.system grep与bash grep产生不同的结果

我正在将一个bash脚本转换成Python,但在使用Python时遇到了问题:

cmd = r"grep 'name' somefile.log | grep -v 'result=""' | grep -v result='is\ OK'"
results_str = os.system(cmd)
print (results_str,"\n")

我没有得到任何grep的输出。但如果我从命令行/bash中运行它,我会得到以下输出:

grep 'name' somefile.log | grep -v 'result=""' | grep -v result='is\ OK'
name="blah", result="我想要grep的东西", action="", info=""

我的Python grep有什么问题?

0
0 Comments

Python的os.system和bash的grep命令在结果上有所不同的原因是,os.system没有提供对进程输入或输出文件流的控制,而os.popen则提供了这样的功能。如果不需要访问进程的I/O,可以使用os.system来简化操作。

解决方法是使用os.popen来代替os.system,并将命令字符串传递给os.popen函数。以下是修改后的代码示例:

import os
cmd = r"grep 'name' somefile.log | grep -v 'result=""' | grep -v result='is\ OK'"
results_str = os.popen(cmd)
print(results_str,"\n")

需要注意的是,os.popen不会返回标准输出。

另外,使用os.open(cmd)会出现错误``,目前还不清楚具体含义。

0