解析Python命令行参数最简单、最简洁、最灵活的方法或库是什么?


当前回答

几乎每个人都在使用getopt

下面是文档的示例代码:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        if o in ("-h", "--help"):
            usage()
            sys.exit()
        if o in ("-o", "--output"):
            output = a

总之,这就是它的工作原理。

你有两种选择。一种是接受辩论的,另一种是接受辩论的 就像开关一样。

sys。argv基本上就是你C语言中的char** argv。就像在C语言中,你跳过第一个元素,也就是你程序的名字,只解析参数:

Getopt。Getopt将根据参数中给出的规则解析它。

这里的"ho:v"描述了短参数:- onletter。:表示-o接受一个参数。

最后["help", "output="]描述长参数(——morethanonletter)。 输出后的=再次表示输出接受一个参数。

结果是一对(选项,参数)的列表

如果一个选项不接受任何参数(比如help), arg部分就是一个空字符串。 然后,您通常希望在此列表上进行循环,并像示例中那样测试选项名称。

我希望这对你有所帮助。

其他回答

几乎每个人都在使用getopt

下面是文档的示例代码:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        if o in ("-h", "--help"):
            usage()
            sys.exit()
        if o in ("-o", "--output"):
            output = a

总之,这就是它的工作原理。

你有两种选择。一种是接受辩论的,另一种是接受辩论的 就像开关一样。

sys。argv基本上就是你C语言中的char** argv。就像在C语言中,你跳过第一个元素,也就是你程序的名字,只解析参数:

Getopt。Getopt将根据参数中给出的规则解析它。

这里的"ho:v"描述了短参数:- onletter。:表示-o接受一个参数。

最后["help", "output="]描述长参数(——morethanonletter)。 输出后的=再次表示输出接受一个参数。

结果是一对(选项,参数)的列表

如果一个选项不接受任何参数(比如help), arg部分就是一个空字符串。 然后,您通常希望在此列表上进行循环,并像示例中那样测试选项名称。

我希望这对你有所帮助。

我更喜欢optparse而不是getopt。它非常具有声明性:您告诉它选项的名称和它们应该具有的效果(例如,设置一个布尔字段),它会返回给您一个根据您的规范填充的字典。

http://docs.python.org/lib/module-optparse.html

我认为大型项目的最佳方法是optparse,但如果您正在寻找一种简单的方法,也许http://werkzeug.pocoo.org/documentation/script适合您。

from werkzeug import script

# actions go here
def action_foo(name=""):
    """action foo does foo"""
    pass

def action_bar(id=0, title="default title"):
    """action bar does bar"""
    pass

if __name__ == '__main__':
    script.run()

所以基本上每个函数action_*都暴露在命令行和一个nice 免费生成帮助信息。

python foo.py 
usage: foo.py <action> [<options>]
       foo.py --help

actions:
  bar:
    action bar does bar

    --id                          integer   0
    --title                       string    default title

  foo:
    action foo does foo

    --name                        string

轻量级命令行参数默认值

尽管argparse很棒,并且是完整文档化的命令行开关和高级特性的正确答案,但是您可以使用函数参数默认值非常简单地处理直接的位置参数。

import sys

def get_args(name='default', first='a', second=2):
    return first, int(second)

first, second = get_args(*sys.argv)
print first, second

'name'参数捕获脚本名称,但不使用。测试输出如下所示:

> ./test.py
a 2
> ./test.py A
A 2
> ./test.py A 20
A 20

对于只想要一些默认值的简单脚本,我发现这已经足够了。您可能还希望在返回值中包含一些类型强制,否则命令行值将全部为字符串。

我更喜欢点击。它抽象了管理选项,并允许“(…)以一种可组合的方式,用尽可能少的代码创建漂亮的命令行界面”。

下面是用法示例:

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()

它还会自动生成格式良好的帮助页面:

$ python hello.py --help
Usage: hello.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --count INTEGER  Number of greetings.
  --name TEXT      The person to greet.
  --help           Show this message and exit.