簡體   English   中英

Python argparse 忽略連接的 args?

[英]Python argparse to ignore concatenated args?

我有一個關於 Python 2.7 中的 argparse 的問題。 我試圖忽略未使用的參數,因為我有一個將參數傳遞給多個 Python 腳本的批處理文件,而不同的腳本需要提取不同的參數。

例如:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_true')

如果我單獨指定每個參數,它工作正常:

args, unknown = parser.parse_known_args(['-a',' -b'])
print args
# Namespace(a=True)
print unknown
# [' -b']

但是,如果我以連接格式指定它們:

args, unknown = parser.parse_known_args(['-ab'])

我明白了:

: error: argument -a: ignored explicit argument 'b'

但是,如果我將此行添加到上面的代碼中:

parser.add_argument('-b', action='store_true')

然后這有效:

args, unknown = parser.parse_known_args(['-ab'])
print args
# Namespace(a=True, b=True)
print unknown
# []

所以看起來我只能使用已知參數的連接格式。 我想知道是否有一種方法可以使用連接格式,它可以提取它所知道的參數? 我能想到的唯一替代方法就是在所有 Python 腳本中定義所有參數,但是這似乎會污染 -h 幫助顯示?

我以前沒有遇到過這個問題,但我可以想象它為什么會發生。 但我必須檢查代碼以確保細節。

'-ab' 被傳遞給一個名為consume_optional的嵌套函數。 這有特殊的代碼來識別和吐出這些連接的參數。 它識別“-a”。 由於它不接受任何參數,因此它假定 'b' 表示 '-b'。 如果未定義“-b”,則會發出此錯誤消息。 它不會將其放入extras列表中。

一個獨立的 '-b' 字符串將被放入extras ,但這發生在這個consume_optionals函數的開頭。 你可能認為'-ab'和'-a -b'是同一個東西,但是解析路徑不同,導致的錯誤不同。

嘗試help=argparse.SUPPRESS for '-b'。 這應該會減少幫助顯示的“污染”。 您可能仍然需要使用自定義的“用法”。

'-ab'在定義了'-b'的解析器中仍然可能有問題,但'-a'不是。 整個字符串將放入“附加”列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM