argparse是python標准庫里面的用來處理命令行參數的庫
先了解位置參數和選項參數的概念,以linux中’ls’命令為例
[root@openstack_1 /]# ls
bin boot dev etc home lib lost+found media mnt opt proc root sbin selinux srv sys tmp usr var
[root@openstack_1 /]# ls root/
anaconda-ks.cfg devstack index.html install.log install.log.syslog
[root@openstack_1 /]# ls -l
總用量 86
dr-xr-xr-x. 2 root root 4096 4月 1 22:42 bin
dr-xr-xr-x. 5 root root 1024 4月 1 22:43 boot
drwxr-xr-x. 18 root root 3880 4月 6 15:24 dev
drwxr-xr-x. 77 root root 4096 4月 6 15:24 etc
drwxr-xr-x. 3 root root 4096 4月 2 20:50 home
dr-xr-xr-x. 15 root root 12288 4月 1 22:42 lib
drwx------. 2 root root 16384 3月 26 20:59 lost+found
drwxr-xr-x. 2 root root 4096 9月 23 2011 media
drwxr-xr-x. 2 root root 4096 9月 23 2011 mnt
drwxr-xr-x. 3 root root 4096 4月 2 21:03 opt
dr-xr-xr-x. 128 root root 0 4月 6 2015 proc
dr-xr-x---. 5 root root 4096 4月 2 21:05 root
dr-xr-xr-x. 2 root root 12288 4月 1 22:42 sbin
drwxr-xr-x. 7 root root 0 4月 6 2015 selinux
drwxr-xr-x. 2 root root 4096 9月 23 2011 srv
drwxr-xr-x. 13 root root 0 4月 6 2015 sys
drwxrwxrwt. 3 root root 4096 4月 6 15:24 tmp
drwxr-xr-x. 12 root root 4096 3月 26 21:03 usr
drwxr-xr-x. 18 root root 4096 3月 26 21:04 var
第一次調用ls沒有使用參數 第二次調用使用了’root/’作為參數 第三次調用使用了 ‘-l’ 選項 其中 ‘root/’是代表的位置參數 而’-l’是選項參數。所謂位置參數就是程序根據該參數出現的位置來確定其意義,比如上上面的例子中 可以是’root/’ 也可以是’bin/’ 等等 二:選項參數是應用程序已經設提前定義好的參數,比如’-l’就是 ls 命令的一個選項 用戶在使用選項參數是 必須要使用命令定義好的選項參數,而不是自己隨意指定。
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
執行腳本
$python main.py
$python main.py -h
usage: main.py [-h]
optional arguments:
-h, --help show this help message and exit
上面的代碼中 第一次執行 沒有加參數 不輸出任何內容
的二次執行 加上 -h參數 則輸出 幫助信息
上面的例子中對程序的描述比較簡單,可以自己加上對程序的描述信息
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.parse_args()
$ python main.py -h
usage: main.py [-h]
say something about this application !!
optional arguments:
-h, --help show this help message and exit
對比之前的輸出 可以看到多出了一句話 ,這一句話就是在argparse.ArgumentParser()函數中新加的參數
好了 現在准備給應用程序增加參數了,先說位置參數
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name')
parser.parse_args()
$python main.py
usage: main.py [-h] name
main.py: error: too few arguments
我們在程序程序中設置了一個位置參數’name’ 這樣的話 在運行程序時就需要指定一個位置參數 否則就會像上面那樣報錯
$python main.py taylor
運行正確 下面增加 -h選項 查看幫助文檔
$python main.py taylor -h
usage: main.py [-h] name
say something about this application !!
positional arguments:
name
optional arguments:
-h, --help show this help message and exit
對比之前的輸出 發現多了一個 positional arguments: 幫助項 並且有一個name字段 表示這個程序需要指定一個name的位置參數。那么現在你可能想要告訴程序的使用者這個name參數怎么用。想要實現這個功能 只需要按照下面的方式來修改
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name', help="i can tell you how to set a name argument")
parser.parse_args()
$python main.py taylor -h
usage: main.py [-h] name
say something about this application !!
positional arguments:
name i can tell you how to set a name argument
optional arguments:
-h, --help show this help message and exit
可以看到name字段已經多了一個關於該字段的描述
好了現在可以考慮獲取用戶傳入的值了
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name', help="i can tell you how to set a name argument")
result = parser.parse_args()
print(result.name)
$python main.py taylor
taylor
對比程序和輸出結果 發現我們已經得到了用戶輸入的值。注意,python獲取的值默認都是字符串類型的,無論用戶輸入的是數字還是字符串。考慮下面的程序
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name', help="i can tell you how to set a name argument")
result = parser.parse_args()
print(type(result.name))
$python main.py taylor
<type 'str'>
$python main.py 123456
<type 'str'>
由上面比較可知, 無論用戶輸入數字還是字符串 在python的返回中都是字符串類型的,如果需要作為其他類型變量來使用,那么需要先轉換成相應的類型,比如 用int(xx)轉換成整數。如果需要指定用戶類必須輸入某種類型, 那么可以這樣做:
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument('name', type=int, help="i can tell you how to set a name argument")
result = parser.parse_args()
print(result.name)
print(type(result.name))
$python main.py taylor
usage: main.py [-h] name
main.py: error: argument name: invalid int value: 'taylor'
$python main.py 123456
123456
<type 'int'>
對比上面的程序和運行結果 可知 當指定了參數類型, 當用戶傳入了一個錯誤類型的參數 程序會報錯退出 否則程序正常執行 並且將結果轉換成相應的數據類型
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("--age", help="this is an optional argument")
result = parser.parse_args()
print(result.age)
$python main.py -h
usage: main.py [-h] [--optional OPTIONAL]
say something about this application !!
optional arguments:
-h, --help show this help message and exit
--age OPTIONAL this is an optional argument
幫助輸出包含了對age選項的說明
$python main.py --age
usage: main.py [-h] [--optional OPTIONAL]
main.py: error: argument --age: expected one argument
只指定了age選項 但是沒有制定該選項的值 則會報錯
$python main.py --age 888
888
$python main.py --age=888
888
指定age的值為888 在程序中可以獲取到輸入值
$python main.py
None
如果選項參數 不指定值 那么 默認獲取到的值是None
可以給選項參數設置簡稱 比如
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a","--age", help="this is an optional argument")
result = parser.parse_args()
print(result.age)
$python main.py -a 888
888
可以向上面那樣使用短標簽
當然有時候一個選項參數只是作為一個開關的作用,而不需要指定具體的值, 如果使用了該選項則表示打開某個功能,否則表示關閉。
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a", "--age", help="this is an optional argument", action="store_true")
result = parser.parse_args()
print(result.age)
$python main.py -a 888
usage: main.py [-h] [-a]
main.py: error: argument -a/--age: ignored explicit argument '888'
如果此時給-a選項指定參數值,則會導致程序報錯
$python main.py -a
True
指定了選項 則為true
$python main.py
False
沒使用選項 則為False
也可以指定選項值為指定列表中的值
import argparse
parser = argparse.ArgumentParser(description="say something about this application !!")
parser.add_argument("-a", "--age", help="this is an optional argument", type=int, choices=[0, 1, 2])
result = parser.parse_args()
print(result.age)
在程序中 指定了 age 參數類型為int 並且只能是0,1,2三個數中的其中一個
$python main.py -a 2
2
使用2作為參數值則正確輸出
$python main.py -a 5
usage: main.py [-h] [-a {0,1,2}]
main.py: error: argument -a/--age: invalid choice: 5 (choose from 0, 1, 2)
使用5作為參數值 因為5不在指定的列表當中 所以會導致報錯
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。