python - 有没有办法控制在 Python argparse 中评估参数的顺序
问题描述
让我们看下面的例子。解析器包含两个参数——输入文件和详细程度。Set_verbosity_level() 函数用于将模块级/全局变量(在我的现实生活中是包级变量)的值控制为 0-4。CheckFile() 函数在输入文件中执行测试(在现实生活中取决于类型)。我想根据详细程度在 CheckFile() 中打印消息。问题是 argparse 在 Set_verbosity_level() 之前调用 CheckFile() 因此在 CheckFile 中详细级别始终为 0/default ...
所以我的问题是是否有任何解决方案可以强制 argparse 在其他参数之前评估一些参数......
import argparse
VERBOSITY = 0
def Set_verbosity_level():
"""Set the verbosity level.
"""
def type_func(value):
a_value = int(value)
globals()['VERBOSITY'] = value
print("Verbosity inside Set_verbosity_level(): " + str(globals()['VERBOSITY']))
return value
return type_func
class CheckFile(argparse.FileType):
"""
Check whatever in the file
"""
def __init__(self, mode='r', **kwargs):
super(CheckFile, self).__init__(mode, **kwargs)
def __call__(self, string):
# Do whatever processing/checking/transformation
# e.g print some message according to verbosity
print("Verbosity inside CheckFile(): " + str(globals()['VERBOSITY']))
return super(CheckFile, self).__call__(string)
def make_parser():
"""The main argument parser."""
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument("-V",
"--verbosity",
default=0,
type=Set_verbosity_level(),
help="Increase output verbosity.",
required=False)
parser.add_argument('-i', '--inputfile',
help="Input file",
type=CheckFile(mode='r'),
required=True)
return parser
if __name__ == '__main__':
myparser = make_parser()
args = myparser.parse_args()
print("Verbosity in Main: " + str(VERBOSITY))
调用此脚本给出:
$python test.py -i test.bed -V 2
Verbosity inside CheckFile(): 0
Verbosity inside Set_verbosity_level(): 2
Verbosity in Main: 2
解决方案
argparse
按列出的顺序处理命令行参数,因此如果您只是交换给定选项的顺序,它将以您想要的详细程度输出:
python test.py -V 2 -i test.bed
这输出:
Verbosity inside Set_verbosity_level(): 2
Verbosity inside CheckFile(): 2
没有其他方法可以告诉argparse
以与列出方式不同的顺序处理命令行参数。
推荐阅读
- if-statement - Google表格中IF函数中的动态条件
- c++ - 始终在 QTextEdit 中滚动整行
- awk - awk:多列数据的操作
- html - 如何创建使用随机数据的多线图
- php - 电报机器人不回答
- firebase - firebase deploy:错误解析触发器:找不到模块'path_to_project/functions'
- javascript - Vue JS - 如何在父组件中获取道具值
- c# - 使用 X.509/SPKI 格式的 RSA 密钥加密,PEM 编码的 PKCS#1 填充
- mysql - 从 laravel 的数据库中获取 2 上一个和下一个与当前条目
- r - 泊松和指数之间的到达和等待时间的对偶