Python中的getopt,optparse模塊都可以進(jìn)行命令行程序的開發(fā),不過它們已經(jīng)被廢棄,在2.7和3.2版本中引入了argparse模塊;這里介紹使用argparser模塊,只需要數(shù)十行代碼,就可以做出漂亮的命令行程序。
1.基本的命令行
看看官方文檔里的一個(gè)示例:

這幾行代碼實(shí)現(xiàn)的功能為:如果命令行輸入不帶--sum選項(xiàng),則對(duì)輸入的多個(gè)整數(shù)執(zhí)行max操作;否則,執(zhí)行sum操作。例如:在命令行中執(zhí)行:python prog.py 1 2 3 4輸出為:4
在命令行中執(zhí)行:python prog.py 1 2 3 4 --sum輸出為:10
上面的代碼中,主要的過程分為三個(gè)步驟:
-
調(diào)用argparse.ArgumentParser的構(gòu)造器創(chuàng)建一個(gè)ArgumentParser對(duì)象。
-
調(diào)用ArgumentParser的add_argument()方法添加命令行的參數(shù),包括可選參數(shù)和必選參數(shù)。其中以--、 -開頭的表示可選參數(shù),其它的表示必須輸入的參數(shù)。
-
調(diào)用parser.parse_args()方法對(duì)傳入的sys.argv參數(shù)進(jìn)行解析。
2.實(shí)現(xiàn)子命令
有時(shí)候,我們可以根據(jù)功能將命令行分組成一系列相關(guān)的子命令。例如,Git命令行可以分為以下幾組:

在Python中,利用argparse模塊也可以很容易做出這樣的子命令行程序。
例如,我們要做一個(gè)對(duì)用戶信息進(jìn)行管理的命令行程序,包括添加、刪除、查詢顯示等幾個(gè)功能。
我們可以根據(jù)功能將其分為三個(gè)子命令:add,delete,show。
相應(yīng)的代碼可以這樣寫:

對(duì)上面的代碼進(jìn)行概要的解釋:ArgumentParser對(duì)象的add_subparsers()方法創(chuàng)建了一個(gè)特殊的action實(shí)例,對(duì)這個(gè)實(shí)例分別調(diào)用add_parser()方法來創(chuàng)建子命令對(duì)應(yīng)的ArgumentParser,再調(diào)用這個(gè)ArgumentParser實(shí)例的add_argument()方法來添加子命令的參數(shù)。一個(gè)比較方便的地方在于,可以通過ArgumentParser的set_defaults()方法來設(shè)置子命令對(duì)應(yīng)的處理函數(shù)。上面的示例中,分別為三個(gè)子命令設(shè)置了處理函數(shù):add_fn,delete_fn,show_fn。
在命令行程序中執(zhí)行:python cmd.py --help,將顯示出以下信息:

從幫助信息中可以看到,命令行被組織為三個(gè)子命令,分別為add,delete,show。
在命令行中執(zhí)行:python cmd.py add --help,可以查看add子命令的幫助信息:

對(duì)于add子命令,它有3個(gè)參數(shù),分別為用戶名、聯(lián)系地址、電話號(hào)碼;其中用戶名為必選參數(shù),其它兩個(gè)為可選參數(shù)。
在命令行中執(zhí)行:python cmd.py add --name 'Eric' --addr 'California,USA' --phone '0076938377'`
添加一個(gè)User的處理邏輯將由add_fn()來完成。程序中將得到一個(gè)信息為{name='Eric',addr='California,USA', phone='0076938377'}的User。

其它的delete和show子命令與此類似,不再贅述。
3.小結(jié)
使用Python的argparse模塊,短短的幾十行代碼就可以搭建起來一個(gè)命令行程序的骨架。
argparse模塊中最重要的是ArgumentParser對(duì)象,它包含了以下幾個(gè)方法:
-
add_argument()
-
add_subparsers()
-
parse_args()
-
編程
+關(guān)注
關(guān)注
90文章
3708瀏覽量
96768 -
程序員
+關(guān)注
關(guān)注
4文章
955瀏覽量
30788 -
python
+關(guān)注
關(guān)注
57文章
4858瀏覽量
89596
原文標(biāo)題:干貨 | 使用Python輕松寫出漂亮的命令行程序
文章出處:【微信號(hào):ZTEdeveloper,微信公眾號(hào):中興開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
用于分析可執(zhí)行程序和內(nèi)存轉(zhuǎn)儲(chǔ)的命令行工具介紹
caxa命令行中的應(yīng)用
如何在Linux命令行中運(yùn)行Python腳本
Fcoder從命令行批量轉(zhuǎn)換為TIFF

如何輕松使用Python寫出漂亮的命令行程序
評(píng)論