Jac*_*ell 5 python flags required argparse
我正在尝试创建一个必需的标志"-f",它接受Argparse中的输入"filename.pdb".
这很简单.标准解决方案是添加选项"required = True".
不幸的是,执行此操作后,"-f"标志仍显示在帮助列表中的可选参数下.更令人困惑的是,"-f"标志在帮助列表的"使用"提示中显示为必需.
这是我的代码:
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file_name", required=True, help="enter name of .pdb file")
parser.add_argument("-bw", "--bin_width", default=.25, help="enter desired bin width in nanometers. default = .25")
parser.add_argument("-bn","--base_name", default="IDP", help="custom prefix for output file naming. default = IDP")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
这是--help返回的帮助窗口
usage: rgcalc.py [-h] -f FILE_NAME [-bw BIN_WIDTH] [-bn BASE_NAME]
optional arguments:
-h, --help show this help message and exit
-f FILE_NAME, --file_name FILE_NAME
enter name of .pdb file
-bw BIN_WIDTH, --bin_width BIN_WIDTH
enter desired bin width in nanometers. default = .25
-bn BASE_NAME, --base_name BASE_NAME
custom prefix for output file naming. default = IDP
Run Code Online (Sandbox Code Playgroud)
正如您在"使用"块中看到的那样,"-f"已从括号中取出,表明它是必需的.尽管如此,"-f"仍出现在"可选参数"部分.
是否有可能:
A)自定义格式化帮助窗口以解决此问题
要么
B)添加一些代码使标志"-f"," - file_name"显示为位置(与可选的)相反,但仍然需要一个标志?
我读到Argparse故意这样做是为了避免位置标志,但我应该这样做是为了迎合传统的linux用户.
谢谢亲切的互联网!
hpa*_*ulj 13
此问题已在http://bugs.python.org/issue9694中讨论过,'argparse required arguments displayed under "optional arguments"'
由于历史实践(在UNIX和Python中)以及缺乏良好的替代方案,这是一个难以解决的术语问题.
像"旗帜"一样的争论'-f'历来被称为选项或期权.通常,除非您想要一些与默认值不同的值,否则不要使用它们.但是'argparse'允许你指定required=True,所以现在你有一个'必需的可选'.并且nargs='?',有可能具有不需要的"定位".
在Python开发人员提出一些替代术语之前,您最好的选择是使用"ArgumentGroup",其中包含您喜欢的标题和描述.默认情况下,解析器有2个ArgumentGroups,'可选参数'和'位置参数'.它必须将论证放在一个或另一个中.您可以创建其他人,并根据需要填充它们.
请参阅http://bugs.python.org/issue9694#msg132327(由原始argparse开发人员发布).
"使用"行是准确描述参数如何使用以及是否需要参数的行.'ArgumentGroups'不会影响使用或解析.他们只是确定帮助热线的分组方式.
对于你的代码:
parser = argparse.ArgumentParser()
req_grp = parser.add_argument_group(title='Required Optional')
req_grp.add_argument("-f", "--file_name", required=True, help="enter name of .pdb file")
parser.add_argument("-bw", "--bin_width", default=.25, help="enter desired bin width in nanometers. default = .25")
parser.add_argument("-bn","--base_name", default="IDP", help="custom prefix for output file naming. default = IDP")
args = parser.parse_args()
"""
usage: stack26227536.py [-h] -f FILE_NAME [-bw BIN_WIDTH] [-bn BASE_NAME]
optional arguments:
-h, --help show this help message and exit
-bw BIN_WIDTH, --bin_width BIN_WIDTH
enter desired bin width in nanometers. default = .25
-bn BASE_NAME, --base_name BASE_NAME
custom prefix for output file naming. default = IDP
Required Optional:
-f FILE_NAME, --file_name FILE_NAME
enter name of .pdb file
"""
Run Code Online (Sandbox Code Playgroud)
将此与通过删除-f标志产生的帮助进行比较:
usage: stack26227536.py [-h] [-bw BIN_WIDTH] [-bn BASE_NAME] file_name
positional arguments:
file_name enter name of .pdb file
optional arguments:
-h, --help show this help message and exit
-bw BIN_WIDTH, --bin_width BIN_WIDTH
enter desired bin width in nanometers. default = .25
-bn BASE_NAME, --base_name BASE_NAME
custom prefix for output file naming. default = IDP
Run Code Online (Sandbox Code Playgroud)