Python 中argparse模組的使用

步入量化學習艾莉絲發表於2018-09-18

閱讀原文

Python解析命令列讀取引數有兩種方式:sys.argv和argparse


1、sys.argv

如果指令碼很簡單或臨時使用,沒有多個複雜的引數選項,可以直接利用sys.argv將指令碼後的引數依次讀取(讀進來的預設是字串格式)。

import sys
print("輸入的引數為:%s" % sys.argv[1])
複製程式碼

命令列執行效果:

>python demo.py 1
輸入的引數為:1
複製程式碼

2、argparse

如果引數很多,比較複雜,並且型別不統一,那麼argparse可以很好的解決這些問題,下面一個例項解釋了argparse的基本使用方法。

import argparse
# description引數可以用於描述指令碼的引數作用,預設為空
parser=argparse.ArgumentParser(description="A description of what the program does")
parser.add_argument('--toy','-t',action='store_true',help='Use only 50K samples of data')
  parser.add_argument('--num_epochs',choices=[5,10,20],default=5,type=int,help='Number of epochs.')
 parser.add_argument("--num_layers", type=int, required=True, help="Network depth.")

args=parser.parse_args()
 print(args)
print(args.toy,args.num_epochs,args.num_layers)
複製程式碼

命令列執行效果:

>python demo.py --num_epochs 10 --num_layers 10
Namespace(num_epochs=10, num_layers=10, toy=False)
False 10 10
複製程式碼

2.1.基本使用

parser.add_argument('--toy','-t',action='store_true',help='Use only 50K samples of data')
複製程式碼

--toy:為引數名稱;

-t:為引數別稱; action='store_true':引數是否使用,如果使用則為True,否則為False。

>python demo.py -t --num_epochs 10 --num_layers 10
Namespace(num_epochs=10, num_layers=10, toy=True)
True 10 10 # 對比和上次執行的區別
複製程式碼

help:引數說明


2.2.相關引數

例項1

parser.add_argument('--num_epochs',choices=[5,10,20],default=5,type=int,help='Number of epochs.')
複製程式碼

choices:候選值,輸出引數必須在候選值裡面,否如會出現下面的結果:

>python demo.py -t --num_epochs 30 --num_layers 10
usage: demo.py [-h] [--toy] [--num_epochs {5,10,20}] --num_layers NUM_LAYERS
demo.py: error: argument --num_epochs: invalid choice: 30 (choose from 5, 10, 20)
複製程式碼

default:預設值,如果不輸入引數,則使用該預設值

>python demo.py -t  --num_layers 10
Namespace(num_epochs=5, num_layers=10, toy=True)
True 5 10
複製程式碼

int:引數型別

例項2

parser.add_argument("--num_layers", type=int, required=True, help="Network depth.")
複製程式碼

required:為必選引數,如果不輸入,則出現以下錯誤:

>python demo.py -t --num_epochs 10
usage: demo.py [-h] [--toy] [--num_epochs {5,10,20}] --num_layers NUM_LAYERS
demo.py: error: the following arguments are required: --num_layers
複製程式碼

例項3 -h:輸出引數使用說明資訊

>python demo.py -h
usage: demo.py [-h] [--toy] [--num_epochs {5,10,20}] --num_layers NUM_LAYERS
 
A description of what the program does
 
optional arguments:
-h, --help            show this help message and exit
--toy, -t             Use only 50K samples of data
--num_epochs {5,10,20}
               Number of epochs.
--num_layers NUM_LAYERS
                Network depth.
複製程式碼

轉載:寬客線上

相關文章