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']
到此,這部分代碼就理解完了。是一段很有用的代碼範例啊。