Python os.system grep与bash grep产生不同的结果
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有什么问题?
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)会出现错误`