Python調(diào)取命令行參數(shù)

我們?cè)趯?xiě)一個(gè)可變性比較大的腳本時(shí)候,很多情況下我們需要傳入很多個(gè)不同的參數(shù),就像我們?cè)诮K端輸入pip --help時(shí):

它有很多可供我們選擇的的參數(shù),我們可以根據(jù)不同的情況進(jìn)行選擇!Python中提供了很多的模塊,如:sys、getopt、argparse等。
sys模塊:
sys.argv:The list of command line arguments passed to a Python script.
sys.argv[0]:返回腳本的名稱
sys.argv[1]:返回第一個(gè)參數(shù)
sys.argv[2]:返回第二個(gè)參數(shù)

腳本sys_test.py:

運(yùn)行結(jié)果:

getopt 模塊
getopt:This module helps scripts to parse the command line arguments in sys.argv.
getopt.getopt(args, options[, long_options])

例一、短格式分析:



使用短格式分析串"abc:d:"。當(dāng)一個(gè)選項(xiàng)只是表示開(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)。所以"abc:d:"就表示"ab"是一個(gè)開(kāi)關(guān)選項(xiàng);"c:d:"則表示后面應(yīng)該帶一個(gè)參數(shù)。
例二、長(zhǎng)格式分析:


使用長(zhǎng)格式分析串列表:['condition=', 'output-file=', 'testing']。長(zhǎng)格式串也有開(kāi)關(guān)狀態(tài),即后面不跟"="號(hào)。如果跟一個(gè)等號(hào)則表示后面還應(yīng)有一個(gè)參數(shù)。這個(gè)長(zhǎng)格式表示"testing"是一個(gè)開(kāi)關(guān)選項(xiàng);"condition=、output-file="則表示后面應(yīng)該帶一個(gè)參數(shù)。
例三、應(yīng)用:

運(yùn)行結(jié)果:


Argparse模塊
argparse:the recommended command-line parsing module in the Python standard library.
argparse的用法:
-創(chuàng)建 ArgumentParser() 對(duì)象
-調(diào)用 add_argument() 添加參數(shù)
-使用 parse_args() 解析參數(shù)

運(yùn)行結(jié)果:

調(diào)用add_argument() 增加參數(shù)

運(yùn)行結(jié)果:

我們發(fā)現(xiàn)添加的兩個(gè)參數(shù)“-x”和“y”,分別為位置參數(shù)(positional arguments)和可選參數(shù)(optional arguments),add_argument()方法必須知道期望的是可選參數(shù),比如-f 或者--foo,還是位置參數(shù),比如一個(gè)文件列表。傳遞給add_argument()的第一個(gè)參數(shù)因此必須是一個(gè)標(biāo)記序列或者一個(gè)簡(jiǎn)單的參數(shù)名字。當(dāng)調(diào)用parse_args()時(shí),可選的參數(shù)將以 '-' 前綴標(biāo)識(shí),剩余的參數(shù)將被假定為位置參數(shù),所以我們不使用可選參數(shù)-x時(shí),程序可以運(yùn)行;當(dāng)我們不使用位置參數(shù) y 時(shí),程序就會(huì)報(bào)錯(cuò)!
更多可參考:argparse — 命令行選項(xiàng)、參數(shù)和子命令的解析器

docopt模塊
docopt就比較強(qiáng)大了,它是根據(jù)你自己寫(xiě)的help messages(文檔描述),自動(dòng)為你生成parser。使用之前需要下載相應(yīng)的庫(kù),這里有個(gè)界面可以試用一下docopt的強(qiáng)大,借用官方的一個(gè)例子:

管它三七二十一,先運(yùn)行一下看看:

例子中:
"[]"表示可選參數(shù),如docopt_test.py [-hvqo FILE];
"()"表示必選參數(shù),以及沒(méi)有包含在[]中都作為必選參數(shù)。
"|" 表示互斥參數(shù)
"..."表示接收多個(gè)參數(shù)值,如docopt_test.py FILE ...

Usage下面的Options里列出了選項(xiàng)(options)及其描述,它具體描述了
選項(xiàng)是否有長(zhǎng)/短形式,如-h, --help
選項(xiàng)后面是否帶參數(shù),如--speed=
選項(xiàng)是否有默認(rèn)值,如[default: 10]
Usage和options里的內(nèi)容就組成了幫助信息,當(dāng)用戶輸入-h或--help參數(shù)時(shí),命令行就會(huì)輸出幫助信息。
docopt會(huì)抽取幫助信息里的內(nèi)容,然后對(duì)命令行傳入的參數(shù)進(jìn)行解析。
例二:

運(yùn)行一下:

返回的arguments是一個(gè)dict,根據(jù)key取出相應(yīng)的value值!
但是目前遇到的問(wèn)題是默認(rèn)值,不能設(shè)置!還請(qǐng)大神們指點(diǎn)迷津?。?!

參考:
Python中的命令行解析工具介紹
argparse
docopt 0.6.2
docopt的github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容