Python的argparse模塊的使用


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


免責聲明!

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



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