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