【问题标题】:groking command line parameters in a python scriptpython脚本中的groking命令行参数
【发布时间】:2012-01-24 19:41:17
【问题描述】:

我对 python 比较陌生。我想写一个脚本并像这样传递参数:

myscript.py --arg1=hello --arg2=world

在脚本中,我想访问参数 arg1 和 arg2。谁能解释一下如何以这种方式访问​​命令行参数?

【问题讨论】:

标签: python argparse optparse


【解决方案1】:

Argparse 是标准库的一部分(从 2.7 和 3.2 版开始)。这是我用来处理所有命令行解析的模块,尽管还有optparse(现已弃用)和getopt。

以下是如何使用argparse的简单示例:

import sys, argparse

def main(argv=None):

    if argv is None:
        argv=sys.argv[1:]

    p = argparse.ArgumentParser(description="Example of using argparse")

    p.add_argument('--arg1', action='store', default='hello', help="first word")
    p.add_argument('--arg2', action='store', default='world', help="second word")

    # Parse command line arguments
    args = p.parse_args(argv)

    print args.arg1, args.arg2

    return 0

if __name__=="__main__":
    sys.exit(main(sys.argv[1:]))

编辑:请注意,在对add_arguments 的调用中使用前导“--”使arg1 和arg2 成为可选参数,因此我提供了默认值。如果你想编程需要两个参数,删除这两个前导连字符,它们将成为必需的参数,你不需要default=... 选项。 (严格来说,您也不需要action='store' 选项,因为store 是默认操作)。

【讨论】:

  • 您的 getopt 链接已损坏。我尝试编辑,但更改只有 1 个字符 :)
  • 你为什么用sys.exit(...)而不是main(sys.argv[1:])?
  • @mattwilkie 看看documentation。基本上这样做可以让我将返回状态传递回 shell,这通常表明脚本是否成功运行。此外,调用sys.exit 会导致执行一些清理操作,例如try 语句上的任何finally 子句。
【解决方案2】:

http://docs.python.org/library/argparse.html#module-argparse

简单的例子可以提供帮助

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)

【讨论】:

    【解决方案3】:

    查看标准库中包含的argparse 模块。一旦你习惯了它,它会让这些东西变得轻而易举,而且它非常强大。这是tutorial。建议使用 this 而不是 optparse 或 getopt 模块。

    如果您不想使用该模块但仍想访问参数,请查看sys module。您将需要查看 sys.argv。

    【讨论】:

    • +1 Doug Hellmann 教程的链接 - 这是对 argparse 的非常有用的介绍。
    【解决方案4】:

    Python 提供了 3 种不同的解析命令行参数的方法,不包括您自己使用对参数列表的原始访问权编写的任何方法。

    http://docs.python.org/dev/whatsnew/2.7.html#pep-389-the-argparse-module-for-parsing-command-lines

    用于解析命令行参数的 argparse 模块被添加为 更强大的 optparse 模块替代品。

    这意味着 Python 现在支持三种不同的模块进行解析 命令行参数:getopt、optparse 和 argparse。 getopt 模块与 C 库的 getopt() 函数非常相似,因此它 如果你正在编写一个 Python 原型,它仍然很有用 最终用 C 重写。 optparse 变得多余,但是有 没有计划删除它,因为还有许多脚本仍在使用 它,并且没有自动更新这些脚本的方法。 (使 讨论了与 optparse 的接口一致的 argparse API,但是 被拒绝为太混乱和困难。)

    简而言之,如果您正在编写新脚本并且无需担心 与早期版本的 Python 兼容,使用 argparse 而不是 选择解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2012-05-26
      • 2021-02-04
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      相关资源
      最近更新 更多