2

次の例を検討してください-

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
>>>

したがって、この場合、検索したキーワードを含む行をPythonシェルに出力したくないので、戻り値、つまりキーワードが存在する場合は0、存在しない場合はゼロ以外の値が必要です。それを達成する方法は?

4

3 に答える 3

4

-qのキーを使用する必要があります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のポータブルキーではないことに注意する必要がありgrepます。GNUgrep(Linuxなど)でのみ機能します。

すべてのシステムで機能させるには、ストリームのpopen/subprocess.Popenおよびリダイレクトを使用する必要があります。

>>> import subprocess
>>> null = open(os.devnull, "w")
>>> grep = subprocess.Popen(shlex.split("grep -i oleg /etc/passwd"), stderr = null, stdout = null)
>>> grep.communicate()
(None, None)
>>> print grep.returncode
1
>>> grep = subprocess.Popen(shlex.split("grep -i igor /etc/passwd"), stderr = null, stdout = null)
>>> grep.communicate()
(None, None)
>>> print grep.returncode
0
于 2012-07-09T16:06:58.090 に答える
1

Igor Chubinの答えは良いものですが、あなたの場合の最も簡単な答えは、シェルを介して出力をリダイレクトすることかもしれません(os.systemはとにかくシェルを呼び出すので、それを使用することもできます)。

os.system("grep -i beatles blur.txt > /dev/null 2>&1")
于 2012-07-09T16:14:57.467 に答える
1

os.system() 「出力が印刷されないようにするにはどうすればよいですか」という一般的な質問の場合、これを行う最良の方法は、サブプロセスモジュールを使用することです。これは、外部プログラムを実行するための推奨される方法であり、簡単な出力リダイレクトを提供します。

これがあなたの例をどのように見せるのかを次に示します。

import os
import subprocess

devnull = open(os.devnull, 'wb')
subprocess.call('grep -i beatles blur.txt', stdout=devnull, stderr=devnull, shell=True)

このshell=Trueオプションは、プログラムがシェルを介して実行されることを意味します。これは実行されますが、を削除してコマンド引数を含むリストを渡すos.system()方が(より安全です)です。shell=True

subprocess.call(['grep', '-i', 'beatles', 'blur.txt'], stdout=devnull, stderr=devnull)
于 2012-07-09T16:15:39.643 に答える