python 笔记:argparse
1 介紹
????????argparse模塊可以讓人輕松編寫用戶友好的命令行接口。程序定義它需要的參數,然后argparse模塊將弄清如何從sys.argv中解析出那些參數。
????????argparse模塊還會自動生成幫助和使用手冊,并在用戶給程序傳入無效參數時報出錯誤信息。
2 基本步驟
2.0 導入庫
import argparse2.1 創建解析器
第一步是創建一個ArgumentParser對象:
parser = argparse.ArgumentParser(description='Process some integers.')ArgumentParser對象包含將命令行解析成 Python 數據類型所需的全部信息。
2.2 添加參數
????????給一個ArgumentParser對象添加程序參數信息是通過調用add_argument方法完成的。
????????通常,這些調用指定?ArgumentParser對象如何獲取命令行字符串并將其轉換為對象。
????????這些信息在之后parse_args()調用時被存儲和使用。
????????ArgumentParser對象的關鍵字見3
parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator')parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')????????之后parse_args()調用時,將返回一個具有?integers?和?accumulate?兩個屬性的對象。
????????????????integers?屬性將是一個包含一個或多個整數的列表
????????????????accumulate?屬性當命令行中指定了?--sum?參數時將是sum函數,否則則是max函數。
2.3 解析參數
???????ArgumentParser對象通過parse_args()方法解析參數。
???????它將檢查命令行,把每個參數轉換為適當的類型然后調用相應的操作。
parser.parse_args(['--sum', '7', '-1', '42'])????????在腳本和命令行中,通常parse_args()會被不帶參數調用,而ArgumentParser對象將自動從?sys.args 中確定命令行參數。
2.4 提取參數
args = parser.parse_args(),得到的結果是一種類似于python字典的數據類型
import argparse parser = argparse.ArgumentParser() parser.add_argument('--foo', help='foo help') args = parser.parse_args() print(args)?我們可以使用args.參數名的方式來提取參數
import argparse parser = argparse.ArgumentParser() parser.add_argument('--foo', help='foo help') parser.add_argument('bax') args = parser.parse_args() print('args.foo',args.foo,'args.bax',args.bax)?
?
3?ArgumentParser對象關鍵字
| prog | 程序的名稱(默認值:sys.argv[0]) ????????這一默認值幾乎總是可取的,因為它將使幫助消息與從命令行調用此程序的方式相匹配。 |
| usage | 描述程序用途的字符串(默認值:從添加到解析器的參數生成) ????????默認情況下,會根據它包含的參數來構建用法消息: ? ? 當手動設置usage 的時候,可以覆蓋這個默認消息 ? ? |
| description | 在參數幫助文檔之前顯示的文本(默認值:無) ? ? ? ? 這個參數簡要描述這個程序做什么以及怎么做。 ????????在幫助消息中,這個描述會顯示在命令行用法字符串和各種參數的幫助消息之間: ? ? |
| epilog | 在參數幫助文檔之后顯示的文本(默認值:無) |
| parents | 一個ArgumentParser對象的列表,它們的參數也應包含在內 ?有些時候,少數解析器會使用同一系列參數。 單個解析器能夠通過提供“parents=?參數”給ArgumentParser對象,使用相同的參數,而不是重復這些參數的定義。 參數使用ArgumentParser對象的列表,從它們那里收集所有的位置和可選的行為,然后將這寫行為加到正在構建的ArgumentParser對象中。 ? 注意大多數父解析器會指定?add_help=False?. 否則,?ArgumentParse?將會看到兩個?-h/--help?選項(一個在父參數中一個在子參數中)并且產生一個錯誤。 |
| formatter_class | 用于自定義幫助文檔輸出格式的類 見formatter_class |
| prefix_chars | 可選參數的前綴字符集合(默認值: '-') ????????許多命令行會使用?-?當作前綴,比如?-f/--foo。如果解析器需要支持不同的或者額外的字符,比如像?+f?或者?/foo?的選項,可以在參數解析構建器中使用“?prefix_chars=?參數”。 ? |
| fromfile_prefix_chars | 當需要從文件中讀取其他參數時,用于標識文件名的前綴字符集合(默認值:?None) fromfile_prefix_chars |
| argument_default | 參數的全局默認值(默認值:?None) |
| conflict_handler | 解決沖突選項的策略(通常是不必要的) |
| add_help | 為解析器添加一個?-h/--help?選項(默認值:?True) |
| allow_abbrev | 如果縮寫是無歧義的,則允許縮寫長選項 (默認值:True) 默認為True的話,這兩個表示的都是+abc的意思? |
| exit_on_error | 決定當錯誤發生時是否讓 ArgumentParser 附帶錯誤信息退出。 (默認值:?True) |
4 add_argument 方法
定義單個的命令行參數應當如何解析。它的形參如下:
| names | 一個命名或者一個選項字符串的列表,例如?foo?或?-f,?--foo。 前綴: parser.add_argument('-f', '--foo')位置參數: parser.add_argument('bar')當parse_args()函數被調用,選項會以?-?前綴識別,剩下的參數則會被假定為位置參數: | |
| action | 當參數在命令行中出現時使用的動作基本類型。 ????????將命令行參數與動作相關聯。 ????????這些動作可以做與它們相關聯的命令行參數的任何事,盡管大多數動作只是簡單的向parse_args()?返回的對象上添加屬性。 ??action?命名參數指定了這個命令行參數應當如何處理 | |
| 'store' | 存儲參數的值。這是默認的動作 | |
| 'store_const' | 存儲被const參數指定的值 ?只有被parser解析了才會賦值? | |
| 'store_true'? 'store_false' | ?'store_const'?分別用作存儲?True?和?False?值的特殊用例。(它們的默認值分別為?False?和?True【反過來】) | |
| 'append' | 存儲一個列表,并且將每個參數值追加到列表中。在允許多次使用選項時很有用。 ? | |
| nargs | 命令行參數應當消耗的數目。 關聯不同數目的命令行參數到單一動作 | |
| N?(一個整數) | 命令行中的?N?個參數會被聚集到一個列表中 ?注意?nargs=1?會產生一個單元素列表。這和默認的元素本身是不同的。(bar和cat的區別) | |
| '?' | ?????????如果可能的話,會從命令行中消耗一個參數,并產生一個單一項。如果當前沒有命令行參數,則會產生default值。 ? ??????對于選項,如果選項字符串出現但沒有跟隨命令行參數,則會產生?const值 ? | |
| ‘*’ | 所有當前命令行參數被聚集到一個列表中。 ? | |
| const | 被一些action和nargs選擇所需求的常數。 ``const`` 參數用于保存不從命令行中讀取但被各種ArgumentParser對象的動作需求的常數值。 最常用的兩例為上面所說的兩種情況:
| |
| default | 當參數未在命令行中出現并且也不存在于命名空間對象時所產生的值。 ? | |
| 對于nargs等于???或?*?的位置參數,?default?值在沒有命令行參數出現時使用。 ? ?? ? | ||
| 提供?default=argparse.SUPPRESS?導致命令行參數未出現時沒有屬性被添加 ?? | ||
| type | 命令行參數應當被轉換成的類型。 默認情況下,解析器會將命令行參數當作簡單字符串讀入。 用戶自定義的函數也可以被使用 ?? | |
| choice | 可用的參數的容器 | |
| required | 此命令行選項是否可省略 (僅選項可用) 通常會認為?-f?和?--bar?等選項是指明?可選的?參數,它們可以在命令行中被忽略。 要讓一個選項成為?必需的,則可以將?True?作為?required關鍵字的參數 | |
| help | 一個此選項作用的簡單描述。 | |
| metavar | 在使用方法消息中使用的參數值示例。(該值不是默認值) ? ? | |
參考資料:
argparse --- 命令行選項、參數和子命令解析器 — Python 3.10.0 文檔
總結
以上是生活随笔為你收集整理的python 笔记:argparse的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch 笔记:手动实现AR (a
- 下一篇: 报错处理: syntax error n