当前位置: 首页 > 面试题库 >

Argparse可选的位置参数?

金令
2023-03-14
问题内容

我有一个脚本,打算像这样使用: usage: installer.py dir [-h] [-v]

dir 是一个位置参数,其定义如下:

parser.add_argument('dir', default=os.getcwd())

我希望它dir是可选的:未指定时,它应该只是cwd

不幸的是,当我不指定dir参数时,我得到了Error: Too few arguments


问题答案:

使用nargs='?'(或nargs='*'如果您需要多个目录)

parser.add_argument('dir', nargs='?', default=os.getcwd())

扩展示例:

>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]

positional arguments:
  dir

optional arguments:
  -h, --help  show this help message and exit
  -v


 类似资料:
  • 问题内容: 试图解析可选的位置参数时,我遇到了以下问题: 例: 输出: 为什么不接受第三个程序调用?这是argparse的限制吗? 问题答案: 这是argparse的局限性,但在3.7中已部分取消。 Unix工具通常不声称支持选项和参数的混合,即使它们经常支持。问题在于将其与子命令等其他功能结合使用会导致歧义。因此,通常,支持所有这些功能的库都会在问题上出现问题,并且不允许混用。或者,他们做一些骇

  • 要指定可选的位置参数,请使用square []括号。 语法 (Syntax) void function_name(param1, [optional_param_1, optional_param_2]) { } 如果可选参数未传递值,则将其设置为NULL。 例子 (Example) void main() { test_param(123); } test_param(n1,

  • 问题内容: 我正在尝试编写一个函数wo,您可以通过argparse解析可变数量的参数- 我知道我可以通过做到这一点。可悲的是,argparse帮助的工作方式(以及人们通常在CLI中编写参数的方式)使位置参数处于最后位置。这导致我的位置参数被视为可选参数的一部分。 运行它,如下面的用法说明所示: 但是如果我跑步给我 为了获得正确的参数解析,我必须运行 那么我该如何: 使argparse重新格式化用法

  • 我正在尝试编写一个函数,您可以通过argparse解析可变数量的参数--我知道我可以通过实现这一点。遗憾的是,argparse help的工作方式(以及人们通常在CLI中编写参数的方式)将位置参数放在最后。这导致我的位置参数作为可选参数的一部分被捕获。 要获得对参数的正确解析,我必须运行 那么我该如何: > 使argparse重新格式化用法输出,以减少误导,甚至更好:

  • 问题内容: 我有一个小问题。我有一个选择是情节的。我希望能够传递类似的数字。但是,这不起作用-解释这是一个位置参数。如果我这样做了,请执行以下操作:将其读取为负数。是否可以阅读? 下面的代码,和我将如何运行它的一个示例是: 如果我执行以下操作,则可以: 编码: 尽管我可以使它以这种方式工作,但我确实更希望能够使用科学计数法。谁有想法? 干杯 问题答案: 正如评论所指出的那样,问题在于前缀被解析为选

  • 我试图获得以下行为: python test.py= 当我使用 但是,如果我添加,试图强制强制强制转换为布尔值,它就会中断。在这种情况下 实际上最终存储。怎么回事??