argparse簡要用法總結


轉: http://vra.github.io/2017/12/02/argparse-usage/

 

argparse 是python自帶的命令行參數解析包,可以用來方便地讀取命令行參數,當你的代碼需要頻繁地修改參數的時候,使用這個工具可以將參數和代碼分離開來,讓你的代碼更簡潔,適用范圍更廣。
argparse使用比較簡單,常用的功能可能較快地實現出來,下面我分幾個步驟,以Python3為例,逐漸遞增地講述argparse的用法。

1. 基本框架

下面是使用argparser從命令行獲取用戶名,然后打印’Hello ‘+ 用戶名,假設python文件名為print_name.py:

# file-name:print_name.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument('--name', default='Great')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
name = args.name
print('Hello {}'.format(name))

 

在命令行執行如下命令:

$ python print_name.py --name Wang
Hello Wang

 

上面的代碼段中,我們顯示引入了argparser包,然后通過argparser.ArgumentParser函數生成argparser對象,其中這個函數的description函數表示在命令行顯示幫助信息的時候,這個程序的描述信息。之后我們通過對象的add_argument函數來增加參數。這里我們只增加了一個--name的參數,然后后面的default參數表示如果沒提供參數,我們默認采用的值。即如果像下面這樣執行命令:

$ python print_name.py

 

則輸出是:

$ Hello Great

 

最后我們通過argpaser對象的parser_args函數來獲取所有參數args,然后通過args.name的方式得到我們設置的--name參數的值,可以看到這里argparse默認的參數名就是--name形式里面--后面的字符串。
整個流程就是這樣,下面我們詳細講解add_argument函數的一些最常用的參數,使得你看完這個教程之后,能完成科研和工作中的大部分命令解析任務。

2. default:沒有設置值情況下的默認參數

如同上例中展示的,default表示命令行沒有設置該參數的時候,程序中用什么值來代替。

3. required: 表示這個參數是否一定需要設置

如果設置了required=True,則在實際運行的時候不設置該參數將報錯:

...
parser.add_argument('-name', required=True)
...

 

則運行下面的命令會報錯:

$ python print_name.py
usage: print_name.py [-h] --name NAME
print_name.py: error: argument --name is required

 

4. type:參數類型

默認的參數類型是str類型,如果你的程序需要一個整數或者布爾型參數,你需要設置type=inttype=bool,下面是一個打印平方的例子:

#name: square.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='Calculate square of a given number')
parser.add_argument('-number', type=int)

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
res = args.number ** 2
print('square of {} is {}'.format(args.number, res))

 

執行:

$ python square.py -number 5
square of 5 is 25

 

5. choices:參數值只能從幾個選項里面選擇

如下面的代碼:

# file-name: choices.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='choices demo')
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])

return parser

if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
print('the arch of CNN is '.format(args.arch))

 

如果像下面這樣執行會報錯:

$ python choices.py -arch resnet
usage: choices.py [-h] -arch {alexnet,vgg}
choices.py: error: argument -arch: invalid choice: 'resnet' (choose from 'alexnet', 'vgg')

 

因為我們所給的-arch參數resnet不在備選的choices之中,所以會報錯

6. help:指定參數的說明信息

在現實幫助信息的時候,help參數的值可以給使用工具的人提供該參數是用來設置什么的說明,對於大型的項目,help參數和很有必要的,不然使用者不太明白每個參數的含義,增大了使用難度。
下面是個例子:

# file-name: help.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='help demo')
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'],
help='the architecture of CNN, at this time we only support alexnet and vgg.')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
print('the arch of CNN is '.format(args.arch))

 

在命令行加-h--help參數運行該命令,獲取幫助信息的時候,結果如下:

$ python help.py -h
usage: help.py [-h] -arch {alexnet,vgg}

choices demo

optional arguments:
-h, --help show this help message and exit
-arch {alexnet,vgg} the architecture of CNN, at this time we only support
alexnet and vgg.

 

7. dest:設置參數在代碼中的變量名

argparse默認的變量名是---后面的字符串,但是你也可以通過dest=xxx來設置參數的變量名,然后在代碼中用args.xxx來獲取參數的值。

8. nargs: 設置參數在使用可以提供的個數

使用方式如下:

parser.add_argument('-name', nargs=x)

 

其中x的候選值和含義如下:

值  含義
N 參數的絕對個數(例如:3)
'?' 0或1個參數
'*' 0或所有參數
'+' 所有,並且至少一個參數

 

如下例子:

# file-name: nargs.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='nargs demo')
parser.add_argument('-name', required=True, nargs='+')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
names = ', '.join(args.name)
print('Hello to {}'.format(names))

 

執行命令和結果如下:

$ python nargs.py -name A B C
Hello to A, B, C

 

參考鏈接:

  1. http://blog.xiayf.cn/2013/03/30/argparse/
  2. https://docs.python.org/3/library/argparse.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM