abstrait:1 模塊簡(jiǎn)介你一定很奇怪Python是如何命令行中的變量的吧?argparse就是用來(lái)解決這個(gè)問(wèn)題的,argparse是optparse的替代。2 模塊使用2.1 開(kāi)始我發(fā)現(xiàn)解釋一個(gè)編程的概念,最簡(jiǎn)單的方式就是用一段代碼來(lái)展示。下面就是一段超級(jí)簡(jiǎn)單的代碼,import argparse parser = argparse.ArgumentParser(
1 模塊簡(jiǎn)介
你一定很奇怪Python是如何命令行中的變量的吧?argparse就是用來(lái)解決這個(gè)問(wèn)題的,argparse是optparse的替代。
2 模塊使用
2.1 開(kāi)始
我發(fā)現(xiàn)解釋一個(gè)編程的概念,最簡(jiǎn)單的方式就是用一段代碼來(lái)展示。下面就是一段超級(jí)簡(jiǎn)單的代碼,
import argparse parser = argparse.ArgumentParser( description = "A simple argument parser", epilog = "This is where you might put example usage" ) parser.print_help()
控制臺(tái)輸出,
usage: main.py [-h] A simple argument parser optional arguments: -h, --help show this help message and exit This is where you might put example usage
這里,我們僅僅是引入argparse,然后設(shè)置了描述和使用部分。這里主要是當(dāng)你向你所創(chuàng)建的程序?qū)で髱椭鷷r(shí),它將會(huì)告訴你如何使用它。在這個(gè)例子中,它打印出簡(jiǎn)單的描述,默認(rèn)的選項(xiàng)("-h")和使用示例。
我們讓這個(gè)例子更加的具體,你一般是通過(guò)命令行傳遞參數(shù),因此將代碼移到Python文件中的一個(gè)函數(shù)。
import argparse def get_args(): parser = argparse.ArgumentParser( description = "A simple argument parser", epilog = "This is where you might put example usage" ) return parser.print_help() if __name__ == "__main__": get_args()
在命令行中運(yùn)行腳本,
python main.py -h
將會(huì)顯示出我們之前看到的文本信息,現(xiàn)在,我們開(kāi)始學(xué)習(xí)如何添加我們需要的變量吧。
2.2 添加變量
下面一段代碼是添加三個(gè)新的我們的parser可以理解的變量。我們添加一個(gè)必須要求的變量,另外兩個(gè)不是必須要求的,我們也可以添加一個(gè)默認(rèn)和一個(gè)必須要求的類(lèi)型。
import argparsedef get_args(): parser = argparse.ArgumentParser( description = "A simple argument parser", epilog = "This is where you might put example usage" ) # required argument parser.add_argument('-x',action = "store",required = True,help = "Help text for option X") # optional argument parser.add_argument('-y',help = "Help text for option Y",default = False) parser.add_argument('-z',help = "Help text for option Z",type = int) print(parser.parse_args())if __name__ == "__main__": get_args()
控制臺(tái)輸出,
zhb@zhb-VM:~/workspace/PythonTestpythonmain.pyusage: main.py [-h] -x X [-y Y] [-z Z] main.py: error: argument -x is required zhb@zhb-VM:~/workspace/PythonTestpythonmain.py-xsomethingNamespace(x='something', y=False, z=None) zhb@zhb-VM:~/workspace/PythonTestpythonmain.py-xsomething-ytextNamespace(x='something', y='text', z=None) zhb@zhb-VM:~/workspace/PythonTestpythonmain.py-xsomething-ztextusage: main.py [-h] -x X [-y Y] [-z Z] main.py: error: argument -z: invalid int value: 'text'zhb@zhb-VM:~/workspace/PythonTestpythonmain.py-xsomething-z10Namespace(x='something', y=False, z=10)
正如你所看到的,如果你不傳入任何變量,而直接運(yùn)行代碼,你將會(huì)出錯(cuò)。然后,我們僅僅傳入要求的變量,你可以看到對(duì)于其它兩個(gè)變量直接使用默認(rèn)值。再然后,我們?cè)噲D將"text"傳給"-y"變量并將它存儲(chǔ)下來(lái),所以,我們直到它并不要求是布爾類(lèi)型。最后兩個(gè)例子顯示當(dāng)你傳入一個(gè)無(wú)效和有效的值給"-z"時(shí)的結(jié)果。
到此,變量名字不需要只有一個(gè)字符,你可以修改它,讓它的描述性更強(qiáng),例如"arg1"或者"simulator"或者任何你想要的。
2.3 短選項(xiàng)和長(zhǎng)選項(xiàng)
下面我們將會(huì)學(xué)習(xí)如何使用短選項(xiàng)和長(zhǎng)選項(xiàng),我們實(shí)際上已經(jīng)使用了短選項(xiàng),
parser.add_argument('-x',action = "store",required = True,help = "Help text for option X")
如果我們想使用長(zhǎng)選項(xiàng),我們僅僅需要在短選項(xiàng)的右邊添加長(zhǎng)選項(xiàng),如下所示,
parser.add_argument('-x','--execute', action = "store",required = True,help = "Help text for option X")
你將會(huì)注意到長(zhǎng)選項(xiàng)不止一個(gè)字符,并且它必須要以兩個(gè)破折號(hào)開(kāi)始,而不是一個(gè)。
2.4 選項(xiàng)沖突
如果兩個(gè)選項(xiàng)相互沖突,你該如何解決?一個(gè)常見(jiàn)的例子就是在調(diào)試模式還是在靜音模式下,運(yùn)行你的應(yīng)用?你可以在任意一種模式下運(yùn)行,但是不能同時(shí)在兩種模式下運(yùn)行。我們?nèi)绾畏乐褂脩粢赃@種方式運(yùn)行呢?一種簡(jiǎn)單的方式就是通過(guò)mutually_exclusie_group函數(shù),假設(shè)選項(xiàng)x和選項(xiàng)y不能同時(shí)運(yùn)行。
import argparsedef get_args(): parser = argparse.ArgumentParser( description = "A simple argument parser", epilog = "This is where you might put example usage" ) group = parser.add_mutually_exclusive_group() group.add_argument('-x','--execute', action = "store",help = "Help text for option X") group.add_argument('-y',help = "Help text for option Y",default = False) parser.add_argument('-z',help = "Help text for option Z",type = int) print(parser.parse_args())if __name__ == "__main__": get_args()
你將會(huì)注意到我們創(chuàng)建了一個(gè)手動(dòng)排它的群組,我們將需要手動(dòng)排它的選項(xiàng)添加到群組,剩下的選項(xiàng)繼續(xù)添加到常規(guī)的parser群組,讓我們嘗試著在命令行中輸入如下命令,
zhb@zhb-VM:~/workspace/PythonTestpythonmain.py-x10 -y 2
當(dāng)我們執(zhí)行這條命令,控制臺(tái)輸出,
usage: main.py [-h] [-x EXECUTE | -y Y] [-z Z]main.py: error: argument -y: not allowed with argument -x/--execute
很明顯,它并沒(méi)有執(zhí)行成功,并且argparse模塊告訴我們什么原因。
2.5 總結(jié)
你現(xiàn)在了解了如何創(chuàng)建一個(gè)基本的變量解析器。這個(gè)模塊還有許多其它你可能感興趣的用法,例如定義一個(gè)交替的目標(biāo)名稱用于保存,使用不同的前綴,創(chuàng)建變量群組等等。我推薦你去閱讀官方文檔。