我相对来说是 Python 的新手。我想编写一个脚本并像这样传递参数:
myscript.py --arg1=hello --arg2=world
在脚本中,我想要访问参数arg1和arg2。有人能解释一下如何以这种方式访问命令行参数吗?
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
是默认操作)。sys.exit(...)
而不是只用 main(sys.argv[1:])
? - matt wilkiesys.exit
会导致执行一些清理操作,例如在try
语句中的任何finally
子句。 - Chrishttp://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)
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。