日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python中parser.add_argument()用法實例(命令行選項、參數和子命令解析器)_python

作者:夏普通 ? 更新時間: 2022-06-01 編程語言

一、argparse介紹

官方文檔

argparse 模塊是 Python 內置的一個用于命令項選項與參數解析的模塊,argparse 模塊可以讓人輕松編寫用戶友好的命令行接口。通過在程序中定義好我們需要的參數,然后 argparse 將會從 sys.argv 解析出這些參數。argparse 模塊還會自動生成幫助和使用手冊,并在用戶給程序傳入無效參數時報出錯誤信息。

二、argparse使用——代碼示例

一個簡單的示例。

import argparse

parser = argparse.ArgumentParser(description='test')

parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')

args = parser.parse_args()
print(args.sparse)
print(args.seed)
print(args.epochs)

三個步驟:

1、創建一個解析器——創建 ArgumentParser() 對象

2、添加參數——調用 add_argument() 方法添加參數

3、解析參數——使用 parse_args() 解析添加的參數

1、創建一個解析器——創建 ArgumentParser() 對象

使用 argparse 的第一步是創建一個 ArgumentParser 對象:

parser = argparse.ArgumentParser(description='test')

ArgumentParser 對象包含將命令行解析成 Python 數據類型所需的全部信息。

描述description

大多數對 ArgumentParser 構造方法的調用都會使用 description= 關鍵字參數。這個參數簡要描述這個程度做什么以及怎么做。在幫助消息中,這個描述會顯示在命令行用法字符串和各種參數的幫助消息之間。

2、添加參數——調用 add_argument() 方法添加參數

給一個 ArgumentParser 添加程序參數信息是通過調用 add_argument() 方法完成的。通常,這些調用指定 ArgumentParser 如何獲取命令行字符串并將其轉換為對象。這些信息在 parse_args() 調用時被存儲和使用。例如

parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')

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 - 解析后的參數名稱,默認情況下,對于可選參數選取最長的名稱,中劃線轉換為下劃線.

3、解析參數——使用 parse_args() 解析添加的參數

ArgumentParser 通過 parse_args() 方法解析參數。它將檢查命令行,把每個參數轉換為適當的類型然后調用相應的操作。在大多數情況下,這意味著一個簡單的 Namespace 對象將從命令行解析出的屬性構建:

args = parser.parse_args()

在腳本中,通常 parse_args() 會被不帶參數調用,而 ArgumentParser 將自動從 sys.argv 中確定命令行參數。

三、結果測試

import argparse

parser = argparse.ArgumentParser(description='test')

parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')

args = parser.parse_args()

print(args.sparse)
print(args.seed)
print(args.epochs)

顯示幫助文檔:

輸錯命令會告訴你usage用法:

使用命令修改參數:

action='store_true’的使用說明

action·- 命令行遇到參數時的動作,默認值是 store。

直接運行python test.py,輸出結果False

運行python test.py --sparse,輸出結果True

也就是說,action=‘store_true’,只要運行時該變量有傳參就將該變量設為True。

四、python args parse_args() 報錯解決

1、error: the following arguments are required: xxx

報錯:

usage: test.py [-h] xxx
test.py: error: the following arguments are required: xxx

原因:

  • args分為可選參數(用--指定)和必選參數(不加--指定)。
  • 如果你定義參數xxx時,沒有用--指定,那么該參數為需要在命令行內手動指定。此時即使通過default設置默認參數,也還是會報錯。

五、其他問題匯總(評論小伙伴問的)

1、下劃線_和橫線-的區別

Q1:請問博主,第一個位置參數假如說是--max_episode_len,然后也有人寫是--max-episode-len,但是他在調用的時候仍然用的是args.max_episode_len,也沒報錯,請問這個下劃線_-的區別在哪里呢?

A1:沒啥區別,在這里表示同一個意思,-對應_,代碼里寫的不一樣或者都改成一樣的都可以

2、debug怎么進行?

Q2:這種運行是不是脫離ide,那debug怎么進行啊?

A2:有linux下,命令行單點調試的方法,python -m pdb test.py,搜一搜,網上挺多

總結

原文鏈接:https://blog.csdn.net/qq_34243930/article/details/106517985

欄目分類
最近更新