Python的argparse模塊的使用
最近看到一份Pytorch代碼有以下內容:
# Training settings
parser = argparse.ArgumentParser(description='PyTorch MNIST Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',
help='input batch size for testing (default: 1000)')
parser.add_argument('--epochs', type=int, default=14, metavar='N',
help='number of epochs to train (default: 14)')
parser.add_argument('--lr', type=float, default=1.0, metavar='LR',
help='learning rate (default: 1.0)')
parser.add_argument('--gamma', type=float, default=0.7, metavar='M',
help='Learning rate step gamma (default: 0.7)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--seed', type=int, default=1, metavar='S',
help='random seed (default: 1)')
parser.add_argument('--log-interval', type=int, default=10, metavar='N',
help='how many batches to wait before logging training status')
parser.add_argument('--save-model', action='store_true', default=False,
help='For Saving the current Model')
args = parser.parse_args()
use_cuda = not args.no_cuda and torch.cuda.is_available()
torch.manual_seed(args.seed)
device = torch.device("cuda" if use_cuda else "cpu")
上網查了一下,這個argparse是是Python標准庫中推薦使用的編寫命令行程序的工具,是一個用來解析命令行程序的參數的模塊。其實就是我們編寫在linux中常見的命令行程序中帶的參數的處理程序。這些參數理論上可以分為定位參數(positional arguments)和可選參數(optional argument),但其實這兩種在定義上沒有任何區別,這里摘取博客https://www.cnblogs.com/lindaxin/p/7975697.html中的例子來說明:
一個定位參數的例子:
# -*- coding: utf-8 -*-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
args = parser.parse_args()
print(rgs.square**2)
一個可選參數的例子:
# -*- coding: utf-8 -*-
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--square", help="display a square of a given number", type=int)
args = parser.parse_args()
if args.square:
print(args.square**2)
其實你看,定義的過程都是一樣的。只是說,如果
1)參數設置了默認值
2)參數沒有設置默認值,但是像上面可選參數的例子一樣,只有判斷了該參數存在的時候才調用
就算是可選參數了。像那種不賦值程序不能正常運行的就是定位參數。
但是約定俗成的是,定位參數就直接寫參數名,而可選參數要寫成類似“--help”(兩個短橫線+全單詞)或者“-h"(一個短橫線+首字母)的形式,這兩個能不能寫在一條我還沒有試。
每一個程序使用argparse之后都會默認有兩個可選參數:-h和--help。用它可以看所有的定位和可選參數的描述,這也和linux用的一樣。注意如果輸入的參數是--help,是不會執行原程序的內容的。
參數解釋
type:輸入值的類型
help:該參數的描述,用在--help中
metavar:在--help中的參數名稱
default:默認值
這些是常用的,完整的看這里(來源:https://www.cnblogs.com/lindaxin/p/7975697.html)
add_argument() 方法定義如何解析命令行參數:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
每個參數解釋如下:
- name or flags - 選項字符串的名字或者列表,例如 foo 或者 -f, --foo。
- action - 命令行遇到參數時的動作,默認值是 store。
- store_const,表示賦值為const;
- append,將遇到的值存儲成列表,也就是如果參數重復則會保存多個值;
- append_const,將參數規范中定義的一個值保存到一個列表;
- count,存儲遇到的次數;此外,也可以繼承 argparse.Action 自定義參數解析;
- nargs - 應該讀取的命令行參數個數,可以是具體的數字,或者是?號,當不指定值時對於 Positional argument 使用 default,對於 Optional argument 使用 const;或者是 * 號,表示 0 或多個參數;或者是 + 號表示 1 或多個參數。
- const - action 和 nargs 所需要的常量值。
- default - 不指定參數時的默認值。
- type - 命令行參數應該被轉換成的類型。
- choices - 參數可允許的值的一個容器。
- required - 可選參數是否可以省略 (僅針對可選參數)。
- help - 參數的幫助信息,當指定為
argparse.SUPPRESS
時表示不顯示該參數的幫助信息.- metavar - 在 usage 說明中的參數名稱,對於必選參數默認就是參數名稱,對於可選參數默認是全大寫的參數名稱.
- dest - 解析后的參數名稱,默認情況下,對於可選參數選取最長的名稱,中划線轉換為下划線.
運行
在命令行中cd到py文件所在的位置,然后輸入python xxx.py
,后面加要輸入的參數,不知道需要哪些的時候可以--help