[英]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.