在多個文件或者不同語言協同的項目中,python腳本經常需要從命令行直接讀取參數。萬能的python就自帶了argprase包使得這一工作變得簡單而規范。PS:optparse包是類似的功能,只不過寫起來更麻煩一些。
如果腳本很簡單或臨時使用,沒有多個復雜的參數選項,可以直接利用sys.argv將腳本后的參數依次讀取(讀進來的默認是字符串格式)。比如如下名為test.py的腳本:
import sysprint "Input argument is %s" %(sys.argv[0])
在shell腳本中運行python test.py help可以得到Input argument is help的結果。
1) 一般形式
但是大多數情況下,腳本很可能需要多個參數,而且每次參數的類型用處各不相同,那么這個時候在參數前添加標簽表明參數的類型和用途便十分有用,而利用argparse模塊可以很方便得實現這一目的。
同樣用名為test.py的腳本舉個栗子:
import argparseparser = argparse.ArgumentParser(description="your script description") # description參數可以用于插入描述腳本用途的信息,可以為空parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode') # 添加--verbose標簽,標簽別名可以為-v,這里action的意思是當讀取的參數中出現--verbose/-v的時候 # 參數字典的verbose建對應的值為True,而help參數用于描述--verbose參數的用途或意義。args = parser.parse_args() # 將變量以標簽-值的字典形式存入args字典if args.verbose: print "Verbose mode on!"else: print "Verbose mode off!"運行python test.py后面跟了--verbose/-v的時候會輸出前者,如果什么都沒有會輸出后者。如果輸入了--verbose/-v以外的參數則會報錯:unrecognized arguments
稍微提一下,action參數表示值賦予鍵的方式,這里用到的是bool類型;如果是'count'表示將--verbose標簽出現的次數作為verbose的值;'append'表示將每次出現的該便簽后的值都存入同一個數組再賦值。(嘛,一般后面兩種用的比較少就不多說了)
PS:--help標簽在使用argparse模塊時會自動創建,因此一般情況不需要我們主動定義幫助信息。
$ python test.py --helpusage: test.py [-h] [--verbose]your script descriptionoptional arguments: -h, --help show this help message and exit --verbose, -v verbose mode
2) 必需參數
這種模式用于確保某些必需的參數有輸入。
parser.add_argument('--verbose', required=True, type=int)
required標簽就是說--verbose參數是必需的,并且類型為int,輸入別的類型會報錯。
3)位置參數(positional arguments)
位置參數與sys.argv調用比較像,參數沒有顯式的--xxx或者-xxx標簽,因此調用屬性也與sys.argv相同。
新聞熱點
疑難解答