1.sys.argv
2.getopt
3.argparse
注意
: 不能在python IDE上調(diào)試
sys.argv
sys.argv 是從外部獲取輸入的參數(shù)员寇,返回的是一個(gè)列表list, 第一個(gè)參數(shù)是腳本的名字程帕, 后面的是依次輸入的參數(shù),適合一些簡(jiǎn)單參數(shù)輸入
的情形痕鳍。
import sys
if __name__ == '__main__':
print (sys.argv)
# testing result
python transmit.py name age job
['transmit.py', 'name', 'age', 'job']
getopt
該模塊是專(zhuān)門(mén)用來(lái)處理命令行參數(shù)的径簿。
函數(shù):opts, args = getopt(args, shortopts, longopts = [])
參數(shù):
- args: 一般是sys.argv[1:]
- shortopts: 短格式 (-) 饭冬, 只表示開(kāi)關(guān)狀態(tài)時(shí),即后面不帶附加數(shù)值時(shí)茎用,在分析串中寫(xiě)入選項(xiàng)字符遣总。當(dāng)選項(xiàng)后面要帶一個(gè)附加數(shù)值時(shí),在分析串中寫(xiě)入選項(xiàng)字符同時(shí)后面加一個(gè)
:
號(hào) 轨功, 如"vc:"旭斥。 - longopts:長(zhǎng)格式(--) , 只表示開(kāi)關(guān)狀態(tài)時(shí)古涧,即后面不帶附加數(shù)值時(shí)垂券,在隊(duì)列中寫(xiě)入選項(xiàng)字符。當(dāng)選項(xiàng)后面要帶一個(gè)附加數(shù)值時(shí)羡滑,在隊(duì)列中寫(xiě)入選項(xiàng)字符同時(shí)后面加一個(gè)
=
號(hào) 菇爪, 如["help", "log="] 。
返回:
- opts: 分析出的格式信息柒昏,是一個(gè)
兩元組
的列表凳宙,即[(選項(xiàng)串1, 附加參數(shù)1), (選項(xiàng)串2, '')], 注意如果沒(méi)有附加數(shù)值則為空字符串 - args: 為不屬于格式信息的剩余的命令行參數(shù)
import sys
import getopt
if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], 'hi:', ['help', 'input='])
print (opts, args)
except getopt.GetoptError as e:
print ('Got a eror and exit, error is %s' % str(e))
測(cè)試結(jié)果如下:
- 不傳任何參數(shù), 返回兩個(gè)空的list
$ python getopt_test.py
[] []
- 不傳帶
-
和--
的參數(shù)职祷, opts是空的列表氏涩,args是兩個(gè)入?yún)⒌牧斜?/li>
$ python getopt_test.py value1 value2
[] ['value1', 'value2']
- 輸入含有
-h
的參數(shù), 可以得知h后不接:
有梆, 表明-h
不會(huì)去取值
$ python getopt_test.py -h
[('-h', '')] []
$ python getopt_test.py -h 1
[('-h', '')] ['1']
$ python getopt_test.py -h -p
Got a eror and exit, error is option -p not recognized
- 輸入含有
-i
的參數(shù)是尖, 可以得知i后接:
, 表明-i
一定會(huì)去取值
$ python getopt_test.py -i
Got a eror and exit, error is option -i requires argument
$ python getopt_test.py -i 1
[('-i', '1')] []
$ python getopt_test.py -i -p
[('-i', '-p')] []
- 輸入
其他帶有-
的參數(shù)泥耀, 會(huì)直接報(bào)錯(cuò)饺汹,不認(rèn)識(shí)這個(gè)參數(shù)
$ python getopt_test.py -a
Got a eror and exit, error is option -a not recognized
- 輸入帶有
--
的參數(shù), 和帶-
的參數(shù)類(lèi)似爆袍, 如果后面不接=
首繁,則表示不需要取值作郭, 后面接了=
, 則表示一定要取值弦疮。
$ python getopt_test.py --help
[('--help', '')] []
$ python getopt_test.py --help 1
[('--help', '')] ['1']
$ python getopt_test.py --help --ls
Got a eror and exit, error is option --ls not recognized
$ python getopt_test.py --help --input
Got a eror and exit, error is option --input requires argument
$ python getopt_test.py --help --input 2
[('--help', ''), ('--input', '2')] []
$ python getopt_test.py --help --input 2 3
[('--help', ''), ('--input', '2')] ['3']
- 輸入全體參數(shù)
$ python getopt_test.py -h -i 1 --help --input 2 3
[('-h', ''), ('-i', '1'), ('--help', ''), ('--input', '2')] ['3']
argparse
argparse 模塊可被用來(lái)解析命令行選項(xiàng)夹攒。
add_argument() 方法定義
:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
1. name or flags - 選項(xiàng)字符串的名字或者列表,例如 foo 或者 -f, --foo
2. action - 命令行遇到參數(shù)時(shí)的動(dòng)作胁塞,默認(rèn)值是 store
2.1 store_const咏尝,表示賦值為const
2.2 append,將遇到的值存儲(chǔ)成列表啸罢,也就是如果參數(shù)重復(fù)則會(huì)保存多個(gè)值
2.3 append_const编检,將參數(shù)規(guī)范中定義的一個(gè)值保存到一個(gè)列表
2.4 count,存儲(chǔ)遇到的次數(shù)扰才;此外允懂,也可以繼承 argparse.Action 自定義參數(shù)解析
3. nargs - 應(yīng)該讀取的命令行參數(shù)個(gè)數(shù),可以是具體的數(shù)字衩匣,或者是?號(hào)蕾总,當(dāng)不指定值時(shí)對(duì)于 Positional argument 使用 default,對(duì)于 Optional argument 使用 const琅捏;或者是 * 號(hào)生百,表示 0 或多個(gè)參數(shù);或者是 + 號(hào)表示 1 或多個(gè)參數(shù)
4. const - action 和 nargs 所需要的常量值
5. default - 不指定參數(shù)時(shí)的默認(rèn)值
6. type - 命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類(lèi)型柄延。
7. choices - 參數(shù)可允許的值的一個(gè)容器
8. required - 可選參數(shù)是否可以省略 (僅針對(duì)可選參數(shù))
9. help - 參數(shù)的幫助信息蚀浆,當(dāng)指定為 argparse.SUPPRESS 時(shí)表示不顯示該參數(shù)的幫助信息
10. metavar - 在 usage 說(shuō)明中的參數(shù)名稱(chēng),對(duì)于必選參數(shù)默認(rèn)就是參數(shù)名稱(chēng)搜吧,對(duì)于可選參數(shù)默認(rèn)是全大寫(xiě)的參數(shù)名稱(chēng)
11. dest - 解析后的參數(shù)名稱(chēng)市俊,默認(rèn)情況下,對(duì)于可選參數(shù)選取最長(zhǎng)的名稱(chēng)赎败,中劃線轉(zhuǎn)換為下劃線
主要有三個(gè)步驟:
- 創(chuàng)建 ArgumentParser() 對(duì)象
- 調(diào)用 add_argument() 方法添加參數(shù)
- 使用 parse_args() 解析添加的參數(shù)
實(shí)例分析:
import argparse
parser = argparse.ArgumentParser('description=Show the usage')
parser.add_argument('integer', type=int, help='display an integer')
args = parser.parse_args()
print (args.integer)
#result
$ python argparse_test.py -h
usage: description=Show the usage [-h] integer
positional arguments:
integer display an integer
optional arguments:
-h, --help show this help message and exit
--------------------------------------------------
$ python argparse_test.py 1
1