python - 单独工作或与所有其他参数一起工作的可选标志(如 -h)
问题描述
我意识到标题可能令人困惑,但我不知道如何表达我的问题。
我的程序的命令行语法如下所示:
conv.py val from to
,其中to
是可选的,但我认为这无关紧要。
我正在尝试添加一个标志,强制我的程序忽略缓存数据并更新其数据库。它应该像这样工作:
conv.py -f val from to
但也像这样:
conv.py -f
我知道应该可以这样做,因为-h
argparse 中的内置标志以类似的方式工作,您可以说conv.py val from to
orconv.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")
无论是否发送了所需的参数,都不会到达。您可以从操作实例中访问解析器命名空间。
推荐阅读
- android - 通过使用 Jetpack 导航组件
- apache-camel - Camel SQL 存储过程语法格式
- python - JupyterHub 单用户无法通过 systemdspawner 使用 tensorflow gpu 支持
- opencl - rgb转nv12结果比较失败
- java - 铁路模拟的命令处理程序/解析器
- jenkins - Jenkins DSL - 掩码密码
- python - 我如何使用 Numpy 计算我的数组中有多少条目,例如给出 0,9 的累积总和?
- java - Xodus Java:找不到符号 PersistentEntityStores
- python - 使用python查找带有if条件的字符串
- azure - Microsoft Azure 人脸 API - 使用 Node-RED 进行人脸检测