Dive Into Python學習日誌__Python

來源:互聯網
上載者:User
 
def  main (argv):
     try :
    opts,args  =  getopt.getopt (argv,  " hg:d " , [ " help " , " grammar= " ])
     except  getopt.GetoptError:
    usage()
    sys.exit( 2 )
     for  opt, arg  in  opts:
     if  opt  in  ( ' -h ' , ' --help ' ):
        usage ()
        sys.exit()
     elif  opt  ==   ' -d ' :
         global  _debug
        _debug  =   1
     elif  opt  in  ( ' -g ' , ' --grammar ' ):
        grammar  =  arg
    source  =   "   " .join(args)

if   __name__   ==   " __main__ " :
    main (sys.argv[ 1 :])
這段代碼很有實用價值。應該能看懂這部分代碼的大致意思。
首先sys.argv可以擷取命令列參數,可以嘗試下面的程式:
<code>
# getparams.py
import sys
print sys.argv
</code>
再如下運行它:
python getparams.py -h -i in --out out.xml
結果為:
['getparams.py','-h','-i','in','--out','out.xml']
如此,sys.argv的工作也就明白了。所以要傳遞參數只需sys.argv[1:]

下面再看關健的getopt.getopt:
先看下它的參數格式
    getopt.getopt (args,"",[longopts])
第一個參數是命令列參數列表,也就是要解析的所有內容
第二個參數是列出所有關心的短參數,短參數如-d our.xml
第三個參數是列出所有關心的長參數,長參數如 --help 是可選的
另外,不論長參數還是短參數都有兩種形式
開關型參數,即後面不用跟值就可完整表達意思,如 -h, --help
普通型參數,後面要跟上一個值來表達出完整意思,如 -i in.xml --out out.xm
為了函數getopt.getopt能區分出這兩種參數,它定義自己的表達規則:
如果一個短參數是開關型參數,那麼直接在參數列表中列出就可,如h,但如果遇到這個短參數i:表明在-i後面的一個值是它的參數值。
長參數和短參數基本類似,只是它不是後面加冒號,而是加‘=’
所以下面的語句意思應該就很清楚了
    getopt.getopt (args,'hd:vi:',['help','out='])
它關心的是命令列中 -h,-d,-v,-i,--help和--out,其中-h,-v,--help是開關型參數,其它不是:)

這個函數返回的是兩個list變數opts和args. opts是一個包括了所以我們關心的命令列中的參數及它們的值(如果是開關型參數,那麼值為空白),args就是其實所有的參數。
所以程式中for迴圈部分也就容易理解了。

下面給出一個例子方便理解:
argv = ['-h','-i','in.xml','-v','-d','debug','--help','--out','out.xml','file1','file2']
執行下列語句
    opts,args = getopt.getopt(argv,'hi:vd:',['--help','out=']
後,opts為:
[('-h',''),('-i','in.xml'),('-v',''),('-d','debug'),('--help',''),('--out','out.xml')]
args為:
['file1','file2']

到此,這部分代碼就理解完了。是一段很有用的代碼範例啊。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.