Python的命令行參數解析

文章作者:Tyan
博客:noahsnail.com ?|? CSDN ?|? 簡書

命令行參數解析在編程語言中基本都會碰到,Python中內置了一個用于命令項選項與參數解析的模塊argparse。下面主要介紹兩種解析Python命令行參數的方式。

1. sys.argv

解析Python中命令行參數的最傳統的方法是通過sys.argv。Demo如下:

#!/usr/env/python python
# _*_ coding: utf-8 _*_

import sys

param1 = sys.argv[1]
param2 = sys.argv[2]

print sys.argv
print param1
print param2
print type(param1)
print type(param2)

測試結果如下:

$ python test.py 1 2
['test.py', '1', '2']
1
2

這種方法比較古老,靈活性很差,同時解析出來的參數都是str類型。但在編寫簡單腳本,參數較少且固定時比較方便。

2. argparse

argparse模塊是Python內置的參數解析模塊,使用起來比較簡單且功能強大。Demo如下:

#!/usr/env/python python
# _*_ coding: utf-8 _*_

import argparse

# Create ArgumentParser() object
parser = argparse.ArgumentParser()

# Add argument
parser.add_argument('--train', required=True, help='path to dataset')
parser.add_argument('--val', required=True, help='path to dataset')
parser.add_argument('--total', type=int, help='number of dataset', default=100)
parser.add_argument('--lr', type=float, default=0.01, help='learning rate')

# Print usage
parser.print_help()

# Parse argument
args = parser.parse_args()

# Print args
print args

print args.train
print type(args.train)
print args.val
print type(args.val)
print args.total
print type(args.total)
print args.lr
print type(args.lr)

測試結果如下:

# Test 1
python test.py --train train_lmdb --val val_lmdb --total 10000 --lr 0.001
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]

optional arguments:
  -h, --help     show this help message and exit
  --train TRAIN  path to dataset
  --val VAL      path to dataset
  --total TOTAL  number of dataset
  --lr LR        learning rate
Namespace(lr=0.001, total=10000, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
10000
<type 'int'>
0.001
<type 'float'>

# Test 2
python test.py --train train_lmdb --val val_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]

optional arguments:
  -h, --help     show this help message and exit
  --train TRAIN  path to dataset
  --val VAL      path to dataset
  --total TOTAL  number of dataset
  --lr LR        learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>


# Test 3
python test.py --val val_lmdb --train train_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]

optional arguments:
  -h, --help     show this help message and exit
  --train TRAIN  path to dataset
  --val VAL      path to dataset
  --total TOTAL  number of dataset
  --lr LR        learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>

ArgumentParser類創建時的參數如下:

  • prog - 程序的名字(默認:sys.argv[0])
  • usage - 描述程序用法的字符串(默認:從解析器的參數生成)
  • description - 參數幫助信息之前的文本(默認:空)
  • epilog - 參數幫助信息之后的文本(默認:空)
  • parents - ArgumentParser 對象的一個列表,這些對象的參數應該包括進去
  • formatter_class - 定制化幫助信息的類
  • prefix_chars - 可選參數的前綴字符集(默認:‘-‘)
  • fromfile_prefix_chars - 額外的參數應該讀取的文件的前綴字符集(默認:None)
  • argument_default - 參數的全局默認值(默認:None)
  • conflict_handler - 解決沖突的可選參數的策略(通常沒有必要)
  • add_help - 給解析器添加-h/–help 選項(默認:True)

add_argument函數的參數如下:

  • name or flags - 選項字符串的名字或者列表,例如foo 或者-f, --foo。
  • action - 在命令行遇到該參數時采取的基本動作類型。
  • nargs - 應該讀取的命令行參數數目。
  • const - 某些action和nargs選項要求的常數值。
  • default - 如果命令行中沒有出現該參數時的默認值。
  • type - 命令行參數應該被轉換成的類型。
  • choices - 參數可允許的值的一個容器。
  • required - 該命令行選項是否可以省略(只針對可選參數)。
  • help - 參數的簡短描述。
  • metavar - 參數在幫助信息中的名字。
  • dest - 給parse_args()返回的對象要添加的屬性名稱。

參考資料:

  1. http://python.usyiyi.cn/translate/python_278/library/argparse.html
  2. http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容