標籤:不用 rgs bin 分享圖片 命令 error 不能 odi color
getopt可以分析輸入的參數,根據不同的參數輸入不同的命令
getopt.getopt( [命令列參數列表], "短選項", "長選項列表" )
getopt這個函數,就是用來抽取sys.argv獲得使用者輸入來確定後續操作的
getopt是一個模組,而這個模組裡面又有getopt函數,
函數返回2個值 opts 和 args
opts是一個存有所有選項及其輸入值的元組,當輸入確定後,這個值就不能更改了
args是除去有用的輸入以後剩餘的部分
#!/usr/bin/env python2.6# coding: utf-8import getoptimport sys shortargs = ‘f:t‘ #短選項longargs = [‘nocolor‘, ‘format‘, ‘--f_long‘, ‘---f_longlong=‘]opts, argv = getopt.getopt( sys.argv[1:] , shortargs, longargs)opts = dict(opts)print optsprint argv
1 短選項名後面的冒號: ,表示該選項必須要有附加的參數如 -f fir; 如果不加冒號,不會講參數放到args中,如-t long
2 長選項裡面的資料,需要在前面加--,不然報異常;有等號說明要有參數,例如--format(正確) --format=1(錯誤)
選項的寫法
對於短選項。“-"號後面要緊跟一個選項字母,如果此選項還有額外參數,可以用空格分開,也可以不分開,長度任意,可以用引號,下面是正確的
-o
-oa
-obbbb
-o "a b"
對於長選項,“--”後面要跟一個單詞,如果還有此選項的額外參數,後面要緊跟”=“,再加上參數,注意”=“的前後不能有空格,下面是正確的寫法
--help=man
不正確的寫法
-- help=file
--help =file
--help = file
--help= file
如何使用getopt進行分析
使用getopt模組分析命令列參數大體上分為三個步驟
1 匯入getopt,sys模組
2 分析命令列參數
3 處理結果
#!/usr/bin/env python2.6# coding: utf-8import getopt,systry: opts, args = getopt.getopt( sys.argv[1:], "ho:", [ "help", "output="] )except getopt.GetoptError: # print help information and exit: print ‘error‘ sys.exit(0)print optsprint args
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是一個二元組的列表,每個元素為(選項串,附加參數),如果沒有附加參數則為空白串
一個栗子
‘-h -o file --help --output=out file1 file2‘
在分析完成之後,opts應該是:
[ ( ‘-h‘,‘‘ ), ( ‘-o‘,‘file‘ ), ( ‘--help‘, ‘‘ ), ( ‘--output‘, ‘out‘ ) ]
而args是:
[ ‘file1‘, ‘file2‘ ]
下面是對分析出的參數進行判斷存在,然後做下一步處理,
for o, a in opts: if o in ("-h", "--help"): #usage() #處理函數 sys.exit() if o in ("-o", "--output"): # 處理函數 sys.exit()
使用一個迴圈,每次從opts中取出一個二元組,賦給兩個變數,o儲存選項參數,a為附加參數,判斷是否存在,近一步處理
完整代碼:
#!/usr/bin/env python2.6# coding: utf-8import getopt, sys def usage(): print "Usage:%s [ -a|-o|-c ] [ --help|--output ] args..." %( sys.argv[0] )if __name__ == ‘__main__‘ : try : shortargs = ‘f:t‘ longargs = [ ‘directory-prefix=‘, ‘format‘, ‘--f_long=‘ ] opts, args = getopt.getopt( sys.argv[1:], shortargs, longargs ) print ‘***********************opts**********************‘ print ‘opts=‘, opts print ‘***********************args**********************‘ print ‘args=‘, args for opt, arg in opts: if opt in ( ‘-h‘, ‘--help‘ ): usage() sys.exit(1) elif opt in ( ‘--f_long‘ ): print ‘--f_long=‘, opt else: print ‘%s==========>%s‘ %( opt, arg ) except getopt.GetoptError: print ‘getopt error‘ usage() sys.exit(1)
執行結果
參考文檔: https://www.cnblogs.com/chushiyaoyue/p/5380022.html
python之getopt