[英]Python argparse: metavar and action=store_true together
[英]Python argparse - user defined Action with 'store_true' behavoiur
嗨,我想我有無法傳遞任何值的解析器參數,例如:
parser.add_argument('-s', '--staged', action=FooAction)
而我的用戶定義動作:
class FooAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print("action")
當我嘗試不帶任何值調用此方法時:
python my_script -s
我收到此錯誤消息:
test.py: error: argument -s/--staged: expected one argument
我知道我可以將操作'store_true'添加到我的參數中,但是在這種解決方案中,我無法將此參數的執行重定向到我定義的操作類中。
有人知道如何修改FooAction來實現'store_true'行為嗎?
設置nargs = 0的Fooaction類:
class FooAction(argparse.Action):
def __init__(self, option_strings, dest, nargs=0, **kwargs):
super(FooAction, self).__init__(option_strings, dest, nargs, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
print("action")
import argparse
class FooAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
print("action")
print(self)
print(parser, namespace, values, option_string)
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--staged', action=FooAction, nargs=0)
args = parser.parse_args()
print(args)
樣品運行:
1151:~/mypy$ python3 stack56348020.py -s
action
FooAction(option_strings=['-s', '--staged'], dest='staged', nargs=0, const=None, default=None, type=None, choices=None, help=None, metavar=None)
ArgumentParser(prog='stack56348020.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True) Namespace(staged=None) [] -s
Namespace(staged=None)
使用你的init
import argparse
class FooAction(argparse.Action):
def __init__(self, option_strings, dest, nargs=0, **kwargs):
super(FooAction, self).__init__(option_strings, dest, nargs=nargs, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
print("action")
print(parser, namespace, values, option_string)
parser = argparse.ArgumentParser()
a1 = parser.add_argument('-s', '--staged', action=FooAction)
print(a1) # display the action object and most of its parameters
args = parser.parse_args()
print(args)
1208:~/mypy$ python3 stack56348020.py -s
FooAction(option_strings=['-s', '--staged'], dest='staged', nargs=0, const=None, default=None, type=None, choices=None, help=None, metavar=None)
action
ArgumentParser(prog='stack56348020.py', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True) Namespace(staged=None) [] -s
Namespace(staged=None)
add_argument
返回它創建的Action對象。 我們通常會忽略它,將其保存到參考中,並在調試過程中方便打印。
即使Action子類被標記為“ private”(帶有_
),查看它們的代碼以查看如何自定義基類也是一個好主意。 Action
類本身並不能做什么。 默認操作使用_StoreAction
。 存儲True / False子類_StoreConst
。 _HelpAction
是唯一不在namespace
存儲某種值的函數; 並退出系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.