在optparse中,是否可以将一个选项设置为必须的?

10

是否可以使optparse中的选项成为必需选项?


是的,这是可能的。在这里查看对这个问题的答案(https://dev59.com/RG855IYBdhLWcg3wViot)。 - user225312
3
是的,但你不应该这样做,因为那违反了命令行界面的惯例和标准。选项不能被强制设为必选项是有原因的。请阅读optparse文档,其中已经清楚地说明了这一点。 - gruszczy
4
好的,那么为什么 argparse 允许必需选项呢?引用 argparse 文档的说法:Optparse拒绝支持这些特性,宁愿追求纯粹而不是实用。 - user225312
我相信你已经回答了自己的问题 :-) 我正在使用argparse,因为我喜欢位置参数功能,但我仍然遵循命令行标准。 - gruszczy
1
我理解你想表达的意思,但是“不可能”和“应该避免”之间有区别。 - user225312
除了“optparse”模块已被弃用这一事实外,强制选项似乎是个矛盾的说法... - martineau
3个回答

20

我之前发表了一条评论,但鉴于许多其他答案都说“不可能”,这里是如何做到的:

parser = OptionParser(usage='usage: %prog [options] arguments')
parser.add_option('-f', '--file', 
                        dest='filename',
                        help='foo help')
(options, args) = parser.parse_args()
if options.filename is None:   # if filename is not given
    parser.error('Filename not given')

这使得-f成为必须的参数。

确实,使用argparse是一种替代方案,但这并不意味着你不能在optparse中也这样做。


2
好的,这就是我的意思(- optparse将其设置为默认值,例如None,然后检查是否不为None),我认为应该提供一个例子。谢谢。顺便说一句,这不是由optparse完成的,而是通过在程序中检查选项的值来完成的。 - Senthil Kumaran
1
实际上,optparse 没有任何作用,这只是一种使选项变为必需的方法。 - user225312

8

你可以单独安装argparse。http://code.google.com/p/argparse/ 然后,当你升级Python时,你可以轻松迁移。 - gruszczy

2
不行,你不能这样。你可以使用 argparse 或者使用 optparse 模块获取选项值,并显式地检查选项值是否已定义(例如,在 optparse 中将其设置为某个默认值,如 None,并检查其是否不为 None),如果未定义,则调用 sys.exit() 要求用户提供该选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接