在Python脚本中理解命令行参数

3

我相对来说是 Python 的新手。我想编写一个脚本并像这样传递参数:

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

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

3
请参考此链接:https://dev59.com/hXNA5IYBdhLWcg3wVcFx - oob
4个回答

5

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时使用前导“--”使arg1arg2成为可选参数,因此我提供了默认值。如果您想要程序需要两个参数,请删除这两个前导短横线,它们将变成必需参数,您将不需要default=...选项。(严格来说,您也不需要action='store'选项,因为store是默认操作)。

你的 getopt 链接已经失效了。我尝试进行编辑,但只有一个字符被更改 :) - oob
为什么要使用 sys.exit(...) 而不是只用 main(sys.argv[1:]) - matt wilkie
@mattwilkie 请查看文档。基本上这样做允许我将返回状态传递回shell,通常表示脚本是否成功运行。此外,调用sys.exit会导致执行一些清理操作,例如在try语句中的任何finally子句。 - Chris

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)

1

请查看标准库中包含的argparse模块。一旦您习惯了它,这将变得非常容易,并且非常强大。这里有一个tutorial。建议使用此模块而不是optparse或getopt模块。

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


对于Doug Hellmann教程的链接点赞+1——它是argparse非常有用的入门介绍。 - Chris

1

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()函数非常相似,因此如果您正在编写一个最终将被重写为C的Python原型,则它仍然很有用。optparse变得多余了,但没有计划删除它,因为还有许多脚本在使用它,并且没有自动更新这些脚本的方法。(将argparse API与optparse的接口一致性进行了讨论,但被拒绝了,因为这太混乱和困难了。)简而言之,如果您正在编写一个新脚本并且不需要考虑与早期版本的Python兼容性,请使用argparse代替optparse。

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