可选标志,可单独使用或与所有其他参数一起使用(如 -h)
Optional flag that works by itself or with all other arguments (like -h)
我意识到标题可能会让人困惑,但我不知道如何表达我的问题。
我的程序的命令行语法如下所示:
conv.py val from to
,其中 to
是可选的,但我认为这不重要。
我正在尝试添加一个标志,强制我的程序忽略缓存数据并更新其数据库。它应该像这样工作:
conv.py -f val from to
也喜欢这样:
conv.py -f
我知道应该可以这样做,因为 argparse 中的内置 -h
标志以类似的方式工作,您可以说 conv.py val from to
或 conv.py -h
或 conv.py -h val
.但是,我不知道如何实现这一目标。
我当前的代码只有 -f
标志作为可选参数:
def parse_args():
parser = argparse.ArgumentParser(prog='conv')
parser.add_argument('-f', action='store_true')
parser.add_argument('value')
parser.add_argument('from_', metavar='from' )
parser.add_argument('to', nargs='?', default='neg')
args = parser.parse_args()
return args.from_, args.to, args.value, args.f
我想使 -f
标志的存在本身或所有其他参数都可以接受。感谢任何帮助。
为此,您将创建一个退出解析的自定义操作:
import argparse
class MyAction(argparse.Action):
def do_the_thing(self):
print("hello from my action")
def __call__(self, parser, namespace, values, option_string=None):
self.do_the_thing()
parser.exit()
parser = argparse.ArgumentParser()
parser.add_argument('value')
parser.add_argument('from_', metavar='from' )
parser.add_argument('to', nargs='?', default='neg')
parser.add_argument("-f", nargs=0, action=MyAction)
args = parser.parse_args()
print("after args parsed")
现在,如果传递了 -f
,则无论是否发送了必需的参数,都不会到达 print("after args parsed")
。您可以从操作实例中访问解析器命名空间。
我意识到标题可能会让人困惑,但我不知道如何表达我的问题。
我的程序的命令行语法如下所示:
conv.py val from to
,其中 to
是可选的,但我认为这不重要。
我正在尝试添加一个标志,强制我的程序忽略缓存数据并更新其数据库。它应该像这样工作:
conv.py -f val from to
也喜欢这样:
conv.py -f
我知道应该可以这样做,因为 argparse 中的内置 -h
标志以类似的方式工作,您可以说 conv.py val from to
或 conv.py -h
或 conv.py -h val
.但是,我不知道如何实现这一目标。
我当前的代码只有 -f
标志作为可选参数:
def parse_args():
parser = argparse.ArgumentParser(prog='conv')
parser.add_argument('-f', action='store_true')
parser.add_argument('value')
parser.add_argument('from_', metavar='from' )
parser.add_argument('to', nargs='?', default='neg')
args = parser.parse_args()
return args.from_, args.to, args.value, args.f
我想使 -f
标志的存在本身或所有其他参数都可以接受。感谢任何帮助。
为此,您将创建一个退出解析的自定义操作:
import argparse
class MyAction(argparse.Action):
def do_the_thing(self):
print("hello from my action")
def __call__(self, parser, namespace, values, option_string=None):
self.do_the_thing()
parser.exit()
parser = argparse.ArgumentParser()
parser.add_argument('value')
parser.add_argument('from_', metavar='from' )
parser.add_argument('to', nargs='?', default='neg')
parser.add_argument("-f", nargs=0, action=MyAction)
args = parser.parse_args()
print("after args parsed")
现在,如果传递了 -f
,则无论是否发送了必需的参数,都不会到达 print("after args parsed")
。您可以从操作实例中访问解析器命名空间。