如何跳过打印命令输出,只是从os.system命令获取返回值?

时间:2012-07-09 15:58:50

标签: python os.system

考虑以下示例 -

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,如果不存在,则为非零。如何实现?

3 个答案:

答案 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)