考虑以下示例 -
Python 2.4.3 (#1, Jan 14 2011, 00:20:04)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("grep -i beatles blur.txt")
Blur's debut album Leisure (1991) incorporated the sounds of Madchester and shoegazing. Following a stylistic change.influenced by English guitar pop groups such as The Kinks, The Beatles and XTC.
0
>>> os.system("grep -i metallica blur.txt")
256
>>>
所以,在这种情况下,我不希望在搜索到的关键字上打印我的搜索关键字,我只想要返回值,如果关键字存在则为0,如果不存在,则为非零。如何实现?
答案 0 :(得分:4)
您只需使用-q
的<{1}}密钥:
grep
我必须注意$ python
Python 2.7.3rc2 (default, Apr 5 2012, 18:58:12)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("grep -iq igor /etc/passwd")
0
>>> os.system("grep -iq oleg /etc/passwd")
256
>>>
不是-q
的可移植密钥,它只适用于GNU grep(Linux等)。
如果要使其适用于所有系统,则必须使用grep
/ popen
和流的重定向。
subprocess.Popen
答案 1 :(得分:1)
Igor Chubin的答案很好,但在你的情况下最简单的答案可能只是通过shell重定向输出(因为os.system无论如何都要调用shell,你也可以使用它。)< / p>
os.system("grep -i beatles blur.txt > /dev/null 2>&1")
答案 2 :(得分:1)
对于“我如何防止打印os.system()
输出”的一般性问题,最好的方法是使用subprocess模块,这是运行外部程序的推荐方法它提供了直接的输出重定向。
以下是您的示例:
import os
import subprocess
devnull = open(os.devnull, 'wb')
subprocess.call('grep -i beatles blur.txt', stdout=devnull, stderr=devnull, shell=True)
shell=True
选项意味着程序将通过shell执行,这是os.system()
所做的,但删除shell=True
并传递一个更好(更安全)使用命令参数列出。
subprocess.call(['grep', '-i', 'beatles', 'blur.txt'], stdout=devnull, stderr=devnull)