ArgumentParser对象没有'add_option'属性 при передаче флагов

0 投票
1 回答
7837 浏览
提问于 2025-04-17 21:54

学习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这个方法在parser里是不存在的,这一点很清楚。我也看到根据这个链接,OptionParser已经被淘汰了。所以,OptionParser不再使用。

我的问题是:我该如何解析-l这个参数,以便在传入时调用printLogs函数呢?

1 个回答

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对象)。而callbacksoptparse中的一个概念,这个在argparse里没有包含。

文档中的FooAction示例,http://docs.python.org/3.4/library/argparse.html#action,做的事情有点像这个optparse的回调。它在被调用时会打印一些信息,然后做一件重要的事情——在命名空间里设置一个值。

撰写回答