2014-03-12 78 views
0

第三天學習python。ArgumentParser對象在傳遞標誌時沒有屬性'add_option'

我試圖瞭解如何從命令行傳遞標誌並調用帶有該標誌的函數。不過,我發現了以下錯誤:

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函數時調用它?

+0

你的問題是什麼?你想知道如何將回調選項翻譯成'argparse' API嗎? – user2357112

+0

對不起,只是重新閱讀。沒有問題!我責怪我的發燒。將更新。 – TheMightyLlama

+0

沒有'add_option'方法。改用'add_argument'。此外,沒有'callback'動作,請參閱有關['action']的文檔(http://docs.python.org/3.4/library/argparse.html#action)以查看哪些可用的動作在那裏,並學習如何創建新的操作。 – Bakuriu

回答

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() 

的​​的主要目的是分析輸入(sys.argv),給你一組參數值(args是一個簡單的namespace對象)。 callbacks是一個optparse的概念,未包含在​​中。

FooAction示例在文檔中,http://docs.python.org/3.4/library/argparse.html#action,像這樣做optparse回調。它在調用時打印一些信息,然後執行重要的事情 - 在名稱空間中設置一個值。

+0

完美,這正是我所需要的。謝謝。 – TheMightyLlama