查看原文:http://www.sijitao.net/2000.html
python中的命令行解析最簡單最原始的方法是使用sys.argv來實現,更高級的可以使用argparse這個模塊。argparse從python 2.7開始被加入到標准庫中,所以如果你的python版本還在2.7以下,那么需要先手動安裝。
基本使用
import argparse parser=argparse.ArgumentParser() parser.add_argument("echo",help="echo the string") args=parser.parse_args() print args.echo
參數介紹
上面這個例子是最簡單的一個使用例子,功能是把你的輸入參數打印到屏幕 。不過對於基本的使用需求,這幾行代碼應該就已經夠用,更加高級的用法可以參考官方文檔。
下面介紹下例子代碼。
1、導入argparse模塊
2、創建解析器對象ArgumentParser,可以添加參數。
description:描述程序
parser=argparse.ArgumentParser(description="This is a example program ")
add_help:默認是True,可以設置False禁用
3、add_argument()方法,用來指定程序需要接受的命令參數
定位參數:
parser.add_argument("echo",help="echo the string")
可選參數:
parser.add_argument("--verbosity", help="increase output verbosity")
在執行程序的時候,定位參數必選,可選參數可選。
add_argument()常用的參數:
dest:如果提供dest,例如dest="a",那么可以通過args.a訪問該參數
default:設置參數的默認值
action:參數出發的動作
store:保存參數,默認
store_const:保存一個被定義為參數規格一部分的值(常量),而不是一個來自參數解析而來的值。
store_ture/store_false:保存相應的布爾值
append:將值保存在一個列表中。
append_const:將一個定義在參數規格中的值(常量)保存在一個列表中。
count:參數出現的次數
parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
version:打印程序版本信息
type:把從命令行輸入的結果轉成設置的類型
choice:允許的參數值
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")
help:參數命令的介紹
上代碼:
我們從一個基本的程序開始(它什么也不做)
import argparse parser = argparse.ArgumentParser() parser.parse_args()
運行結果:
$ python prog.py
$ python prog.py --help usage: prog.py [-h] optional arguments: -h, --help show this help message and exit $ python prog.py --verbose usage: prog.py [-h] prog.py: error: unrecognized arguments: --verbose $ python prog.py foo usage: prog.py [-h] prog.py: error: unrecognized arguments: foo
結果分析:
- 若不給參數而運行這個程序,將不會得到任何結果。
- 第二條命名顯示了使用的argparse的好處,你什么也沒做,卻得到了一個很好的幫助信息。
- 我們無需人為設置--help參數,就能得到一個良好的幫助信息。但是若給其他參數(比如foo)就會產生一個錯誤。
位置參數
首先,給一個例子:
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print args.echo
運行結果:
$ python prog.py
usage: prog.py [-h] echo prog.py: error: the following arguments are required: echo $ python prog.py --help usage: prog.py [-h] echo positional arguments: echo optional arguments: -h, --help show this help message and exit $ python prog.py foo foo
結果分析:
- 這次,我們增加了一個add_argument()方法,用來設置程序可接受的命令行參數。
- 現在要運行程序,就必須設置一個參數。
- parse_args()方法實際上從我們的命令行參數中返回了一些數據,在上面的例子中是echo
- 這個像“魔法”一樣的過程,是argparse自動完成的。
盡管自動產生的幫助信息展示地很美觀,但是我們仍然無法只根據echo這個參數知道它是做什么的。所以,我們增加了一些東西,使得它變得更有用。
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo", help="echo the string you use here") args = parser.parse_args() print args.echo
運行結果:
$ python prog.py -h
usage: prog.py [-h] echo positional arguments: echo echo the string you use here optional arguments: -h, --help show this help message and exit
在此基礎上,我們再多改變一點:(計算輸入參數square的平方)
import argparse parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number") args = parser.parse_args() print args.square**2
下面是運行結果:
$ python prog.py 4 Traceback (most recent call last): File "prog.py", line 5, in <module> print args.square**2 TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
這個程序並不能正確運行,因為argparse會將輸入當作字符串處理,所以我們需要設置它的類型:(type=int)
import argparse parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) args = parser.parse_args() print args.square**2
下面是運行結果:
$ python prog.py 4
16
$ python prog.py four
usage: prog.py [-h] square prog.py: error: argument square: invalid int value: 'four'
現在,這個程序能夠順利運行,而且能夠處理一些錯誤輸入。
(今天暫時寫到這里,以后接着寫)