標籤:
可以解析這樣的命令
./cron_ctrl jobname1 --stop ;./cron_ctrl jobname1 --start;./cron_ctrl jobname1 --list
#!/usr/bin/env pythonimport osimport sysfrom optparse import OptionParserdef cronOptionParser(): name=sys.argv[1] #print name parser = OptionParser() parser.add_option("","--stop",dest="stopname",action="store_false",help="stop a job") #store_false 表示--stop 不帶參數,stopname用來判斷命令中是否有--stop parser.add_option("","--start",dest="startname",action="store_false",help="start a job") parser.add_option("-l","--list",dest="listname",action="store_false",help="list a job") (options,args) = parser.parse_args() stopname = options.stopname startname = options.startname listname = options.listname if stopname!=None: ###do something ### os.system(‘crontab -e‘) if startname!=None: ###do something ### os.system(‘crontab -e‘) if listname!=None: ###do somethind ### os.system(‘crontab -l | grep name‘)if __name__=="__main__": cronOptionParser()
以上代碼主要參考http://blog.csdn.net/azhao_dn/article/details/6921441
需要注意的是一些參數 比如說 -o file 這裡的-o後面需要加參數,而有些比如說-h 不需要加參數,這兩種要注意區別對待
上面這個實現略顯繁瑣,所以有下面的
import sys
import getopt
def TestGetOpt():
try:
opts, args = getopt.getopt(sys.argv[1:],‘d:f:h‘,[‘days=‘,‘files=‘,‘help‘])
except getopt.GetoptError:
usage()
sys.exit()
print (opts)
print (args)
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-d", "--days"):
day = a
elif o in ("-f", "--files"):
files = a
print (day)
print (files)
對於程式的解釋是
1. 處理所使用的函數叫getopt(),因為是直接使用import匯入的getopt模組,所以要加上限定getopt才可以。
2. 使用sys.argv[1:]過濾掉第一個參數(它是執行指令碼的名字,不應算作參數的一部分)。
3. 使用短格式分析串"ho:"。當一個選項只是表示開關狀態時,即後面不帶附加參數時,在分析串中寫入選項字元。當選項後面是帶一個附加參數時,在分析串中寫入選項字元同時後面加一個":"號。所以"ho:"就表示"h"是一個開關選項;"o:"則表示後面應該帶一個參數。
4. 使用長格式分析串列表:["help", "output="]。長格式串也可以有開關狀態,即後面不跟"="號。如果跟一個等號則表示後面還應有一個參數。這個長格式表示"help"是一個開關選項;"output="則表示後面應該帶一個參數。
5. 調用getopt函數。函數返回兩個列表:opts和args。opts為分析出的格式資訊。args為不屬于格式資訊的剩餘的命令列參數。opts是一個兩元組的列表。每個元素為:(選項串,附加參數)。如果沒有附加參數則為空白串‘‘。
6. 整個過程使用異常來包含,這樣當分析出錯時,就可以列印出使用資訊來通知使用者如何使用這個程式。
最後,這裡http://lingxiankong.github.io/blog/2014/01/14/command-line-parser/ 給出了更多的方法。
python解析命令列