2016-04-07 12 views
0

Python 2.4のサブプロセスメソッドを使用してgrepコマンドを実行するための適切な構文を提供する人はいますか?Solaris 10のPython 2.4サブプロセスとgrep複数ファイル

# grep -n down /tmp/support/alarms/SS7Alarms.* 
/tmp/support/alarms/SS7Alarms.263:8301:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.264:7733:LAES: SS7MGR: Association Id 1 is down 
/tmp/support/alarms/SS7Alarms.264:7737:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.264:12603:LAES: SS7MGR: Association Id 1 is down 
/tmp/support/alarms/SS7Alarms.264:12607:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.265:6523:LAES: SS7MGR: Association Id 1 is down 
/tmp/support/alarms/SS7Alarms.265:6531:LAES: SS7MGR: Association Id 1 is down 
/tmp/support/alarms/SS7Alarms.267:10349:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.270:11159:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.270:13229:LAES: SS7MGR: Association Id 2 is down 
/tmp/support/alarms/SS7Alarms.271:13041:LAES: SS7MGR: Association Id 2 is down 

私は、個々のファイルが仕事を得ることができます:そのようなファイル/tmp/support/alarms/SS7Alarms.*ありません

p = subprocess.Popen(["grep", "-n", "down", "/tmp/support/alarms/SS7Alarms.*"], shell=True, stdout=subprocess.PIPE) 
>>> Usage: grep -hblcnsviw pattern file . . . 

答えて

1

p = subprocess.Popen(["grep", "-n", "down", "/tmp/support/alarms/SS7Alarms.263"], stdout=subprocess.PIPE) 

私はそれが失敗した複数のファイルをgrepししようとします。個別の引数として各ファイルをgrepに渡す必要があります。 *がシェルで動作する唯一の理由は、シェルが*をgrepに渡す前に複数の引数に展開するためです。

あなたは、グロブを展開するglobモジュールを使用する場合:

import glob 

p = subprocess.Popen(
    ["grep", "-n", "down"] + glob.glob("/tmp/support/alarms/SS7Alarms.*"), 
    stdout=subprocess.PIPE) 

あなたはだけでなくPopenへの引数としてshell=Trueを使用することができますが、それは他の問題を引き起こす可能性があります。

0

周りを見回してから、私はあきらめて、stackoverflowに投稿して、数分間のテストをしてみました。

p = subprocess.Popen('grep -n down /tmp/support/alarms/SS7Alarms.*', shell=True, stdout=subprocess.PIPE) 

完全なコマンドを1つの文字列に入れました。

関連する問題