Python 中带有可选参数的命令行选项

发布于 2024-08-05 16:27:57 字数 174 浏览 7 评论 0原文

我想知道是否有一种简单的方法来解析 Python 中具有可选参数的命令行选项。例如,我希望能够以两种方式调用脚本:

> script.py --foo
> script.py --foo=bar

从Python getopt 文档看来我必须选择其中一种。

I was wondering if there's a simple way to parse command line options having optional arguments in Python. For example, I'd like to be able to call a script two ways:

> script.py --foo
> script.py --foo=bar

From the Python getopt docs it seems I have to choose one or the other.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

我做我的改变 2024-08-12 16:27:57

stdlib 中的 optparse 模块不支持开箱即用(并且不应该这样做,因为以这种方式使用命令行选项是一种不好的做法)。

正如 @Kevin Horn 指出的,你可以使用 argparse 模块(可通过 easy_install argparse 安装或直接获取 argparse.py 并将其放在 sys.path 中的任何位置)。

示例

#!/usr/bin/env python
from argparse import ArgumentParser

if __name__ == "__main__":
    parser = ArgumentParser(prog='script.py')
    parser.add_argument('--foo', nargs='?', metavar='bar', default='baz')

    parser.print_usage()    
    for args in ([], ['--foo'], ['--foo', 'bar']):
        print "$ %s %s -> foo=%s" % (
            parser.prog, ' '.join(args).ljust(9), parser.parse_args(args).foo)

输出

usage: script.py [-h] [--foo [bar]]
$ script.py           -> foo=baz
$ script.py --foo     -> foo=None
$ script.py --foo bar -> foo=bar

optparse module from stdlib doesn't support it out of the box (and it shouldn't due to it is a bad practice to use command-line options in such way).

As @Kevin Horn pointed out you can use argparse module (installable via easy_install argparse or just grab argparse.py and put it anywhere in your sys.path).

Example

#!/usr/bin/env python
from argparse import ArgumentParser

if __name__ == "__main__":
    parser = ArgumentParser(prog='script.py')
    parser.add_argument('--foo', nargs='?', metavar='bar', default='baz')

    parser.print_usage()    
    for args in ([], ['--foo'], ['--foo', 'bar']):
        print "$ %s %s -> foo=%s" % (
            parser.prog, ' '.join(args).ljust(9), parser.parse_args(args).foo)

Output

usage: script.py [-h] [--foo [bar]]
$ script.py           -> foo=baz
$ script.py --foo     -> foo=None
$ script.py --foo bar -> foo=bar
绝不服输 2024-08-12 16:27:57

另请注意,标准库还有 optparse,这是一个更强大的选项解析器。

Also, note that the standard library also has optparse, a more powerful options parser.

愚人国度 2024-08-12 16:27:57

查看 argparse:
http://code.google.com/p/argparse/

尤其是“nargs”选项

check out argparse:
http://code.google.com/p/argparse/

especially the 'nargs' option

撩动你心 2024-08-12 16:27:57

optparse 中没有选项允许您执行此操作。但你可以扩展它来做到这一点:

http://docs.python .org/library/optparse.html#adding-new-actions

There isn't an option in optparse that allows you to do this. But you can extend it to do it:

http://docs.python.org/library/optparse.html#adding-new-actions

路还长,别太狂 2024-08-12 16:27:57

使用 optparse 包。

Use the optparse package.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文