【发布时间】:2018-06-27 15:00:36
【问题描述】:
我想向参数传递一个“参数”。
即,在以下代码中:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-a")
print parser.parse_args(['-a', 'hi'])
print parser.parse_args(['-a', '-hi'])
输出是:
Namespace(a='hi')
usage: problem.py [-h] [-a A]
problem.py: error: argument -a: expected one argument
虽然我希望它是:
Namespace(a='hi')
Namespace(a='-hi')
我怎样才能做到这一点?
我在帮助部分看到了15.4.4.3. Arguments containing -,但它似乎只支持负数。此外,他们建议传递“--”,但这在我的用例中并不好,但是“--”之后的所有内容都不会被视为参数(如果我理解正确的话)。
但我希望“-a”仅使用 1 个参数,然后继续将其他参数解析为真实参数。
怎么做?
编辑
在参数起作用之前添加一个空格:
print parser.parse_args(['-a', ' -hi'])
但是有没有办法实现这一点,而不需要用户添加空格?
【问题讨论】:
-
我想不出任何需要以 - 为前缀的参数值的用例。为什么不直接传入
hi并在使用参数时添加破折号? -
这个脚本是一个编译包装器,它调用另一个编译脚本。它需要允许用户按原样将参数传递给“低级”编译脚本。包装器不熟悉底层脚本的所有参数,不知道是否以及何时需要破折号
-
经过一番研究,我没有找到按照你说的做的方法,这似乎是 argparse 的固有限制。 7 年前就有过讨论,但似乎没有取得任何进展,一些标准模块被废弃了。最好的解决方法似乎是使用
=,比如parse_args(['-a=-hi']) -
optparse是(并将保持)可用作替代解析器。和旧的getopt一样。