Python 使用argparse是否可以使以前定义的参数成为必需参数?

Python 使用argparse是否可以使以前定义的参数成为必需参数?,python,argparse,Python,Argparse,我目前正在为几个相关脚本定义一组命令行参数,我希望它们在给定上下文中使用相同的参数,而不必复制/粘贴相应的部分 在某些上下文中,给定的参数是可选的,而在另一些上下文中,它是必需的,所以我不能只设置一个通用参数解析器并在所有脚本中使用它 一种方法是使用函数create\u argument\u parser(flags),它根据给定的标志创建解析器 另一种方法是首先定义参数解析器,然后根据需要修改它 有没有一种方法可以先定义一组参数,然后使它们成为可选/必需的 In [1]: import arg

我目前正在为几个相关脚本定义一组命令行参数,我希望它们在给定上下文中使用相同的参数,而不必复制/粘贴相应的部分

在某些上下文中,给定的参数是可选的,而在另一些上下文中,它是必需的,所以我不能只设置一个通用参数解析器并在所有脚本中使用它

一种方法是使用函数
create\u argument\u parser(flags)
,它根据给定的标志创建解析器

另一种方法是首先定义参数解析器,然后根据需要修改它

有没有一种方法可以先定义一组参数,然后使它们成为可选/必需的

In [1]: import argparse
argparse
是用Python的类结构编写的,因此大多数命令生成的对象都可以进行检查,并在一定程度上进行修改。但要明智地这样做。不要害怕编写自己的实用程序函数,如果这样有帮助的话,甚至可以编写类

首先,我们制作一个
解析器
对象:

In [2]: parser = argparse.ArgumentParser()
In [3]: parser
Out[3]: ArgumentParser(prog='ipython3', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
默认情况下,
位置是必需的<代码>选项
不是,尽管我们可以指定该参数,创建“必需的可选”

但由于
required
操作的一个简单属性,我们可以更改它:

In [11]: a2.required=True
In [12]: parser.print_usage()
usage: ipython3 [-h] --bar BAR foo
因此,是使用实用程序脚本创建解析器,还是进行类似的修改,取决于您。此修改路径可能更难维护/调试。使用
parents
机制创建多个(子)解析器时,在更改属性时要格外小心

argparse
是用Python的类结构编写的,因此大多数命令生成的对象都可以进行检查,并在一定程度上进行修改。但要明智地这样做。不要害怕编写自己的实用程序函数,如果这样有帮助的话,甚至可以编写类

首先,我们制作一个
解析器
对象:

In [2]: parser = argparse.ArgumentParser()
In [3]: parser
Out[3]: ArgumentParser(prog='ipython3', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
默认情况下,
位置是必需的<代码>选项
不是,尽管我们可以指定该参数,创建“必需的可选”

但由于
required
操作的一个简单属性,我们可以更改它:

In [11]: a2.required=True
In [12]: parser.print_usage()
usage: ipython3 [-h] --bar BAR foo
因此,是使用实用程序脚本创建解析器,还是进行类似的修改,取决于您。此修改路径可能更难维护/调试。使用
parents
机制创建多个(子)解析器时,在更改属性时要格外小心。

您可以找到“最常用的解析器”,并将其放入泛型函数中,然后为每个脚本添加必要的参数。但从您所说的来看,它们似乎并不常见,为什么不为每个脚本定义自己的argparser呢?它更具可读性……您可以找到“最伟大的通用解析器”,并将其放入通用函数中,然后为每个脚本添加必要的参数。但从您所说的来看,它们似乎并不常见,为什么不为每个脚本定义自己的argparser呢?它更具可读性。。。