簡體   English   中英

Solaris 10上的Python 2.4子進程和grep多個文件

[英]Python 2.4 subprocess and grep multiple files on 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

我可以得到一個單獨的文件來工作:

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

當我嘗試grep多個文件時,它失敗了:

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

沒有這樣的文件/tmp/support/alarms/SS7Alarms.* 您必須將每個文件作為單獨的參數傳遞給grep。 *在shell中起作用的唯一原因是因為shell在將它們傳遞給grep之前會將*擴展為多個參數。

如果要擴展glob ,請使用glob模塊:

import glob

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

您可以改為使用shell=True作為Popen的參數,但這可能會導致其他問題。

經過數小時的環顧后,我放棄了並在stackoverflow上發布,只是為了弄清楚測試的時間。

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

將完整命令放入一個字符串即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM