ArgumentParser对象在传递标志时没有属性'add_option'

时间:2014-03-12 07:42:52

标签: python argparse

学习python的第三天。

我试图了解如何从命令行传递标志并使用该标志调用函数。但是,我收到以下错误:

Traceback (most recent call last):
  File "main.py", line 18, in <module>
    parser.add_option("-l", action="callback", callback=printLogs)
AttributeError: 'ArgumentParser' object has no attribute 'add_option'

代码在这里:

import argparse

def printLogs():
    print("logs!")

parser = argparse.ArgumentParser()
parser.add_argument('-e','--entry', type=str, help='New entry',required=False)
parser.add_option("-l", action="callback", callback=printLogs)

args = parser.parse_args()

我可以理解解析器不存在parser.add_option。这很清楚。我还可以看到OptionParser已按this link弃用。所以,OptionParser已经出局了。

问题是:如何解析-l参数,以便在传递printLogs函数时调用它?

1 个答案:

答案 0 :(得分:0)

我实现这个的方式是:

import argparse

def printLogs():
    print("logs!")

parser = argparse.ArgumentParser()
parser.add_argument('-e','--entry', type=str, help='New entry')
parser.add_argument("-l", action="store_true", help='print logs')

args = parser.parse_args()
if args.l:
    printLogs()

argparse的主要目的是解析输入(sys.argv),并为您提供一组参数值(args是一个简单的namespace对象)。 callbacks是一个optparse概念,未包含在argparse中。

文档中的FooAction示例http://docs.python.org/3.4/library/argparse.html#action执行类似此optparse回调的操作。它在调用时打印一些信息,然后重要的是 - 在命名空间中设置一个值。