python Argparse 模塊入門


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 41 22:42 bin
dr-xr-xr-x.   5 root root  1024 41 22:43 boot
drwxr-xr-x.  18 root root  3880 46 15:24 dev
drwxr-xr-x.  77 root root  4096 46 15:24 etc
drwxr-xr-x.   3 root root  4096 42 20:50 home
dr-xr-xr-x.  15 root root 12288 41 22:42 lib
drwx------.   2 root root 16384 326 20:59 lost+found
drwxr-xr-x.   2 root root  4096 923 2011 media
drwxr-xr-x.   2 root root  4096 923 2011 mnt
drwxr-xr-x.   3 root root  4096 42 21:03 opt
dr-xr-xr-x. 128 root root     0 46 2015 proc
dr-xr-x---.   5 root root  4096 42 21:05 root
dr-xr-xr-x.   2 root root 12288 41 22:42 sbin
drwxr-xr-x.   7 root root     0 46 2015 selinux
drwxr-xr-x.   2 root root  4096 923 2011 srv
drwxr-xr-x.  13 root root     0 46 2015 sys
drwxrwxrwt.   3 root root  4096 46 15:24 tmp
drwxr-xr-x.  12 root root  4096 326 21:03 usr
drwxr-xr-x.  18 root root  4096 326 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不在指定的列表當中 所以會導致報錯


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: