python之getopt

來源:互聯網
上載者:User

標籤:不用   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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.