2012-10-17 44 views
0

我的主要蟒蛇函數調用執行函數接受argv並調用這些論點其他兩個函數來設置整個應用程序。不要停止時-h

的問題是,如果argv包括-h(`--help),那麼它被傳遞給所述第一功能,它打印它的預期用法消息(由argparse生成),象下面這樣:

optional arguments: 
    -h, --help  show this help message and exit 
    -x section 

但隨即停止執行!,我們又回到了提示符。

我想繼續執行,從而第二功能也被稱爲,其使用消息也被打印。有誰知道這是如何實現的?

+0

看看在argparse模塊。 http://docs.python.org/library/argparse.html#module-argparse – pogo

+1

@Pogo:他*是*使用argparse模塊,這就是是提高系統退出時'-h'在傳遞 –

回答

2

你需要趕上SystemExit例外:

exited = None 
try: 
    function1(argv) 
except SystemExit as e: 
    # don't exit just yet 
    exited = e 
function2(argv) 

# If function 2 *did not* exit, there was a legitimate reason 
# re-raise the SystemExit exception 
if exited is not None: 
    raise exited 

注意,我function1提高了系統的出口除外;它可能是由於採取了不同的行動而引發的,而不是-h標誌。如果function2本身不會引發異常,我們會重新提升原始SystemExit異常以進行正確清理。

except SystemExit as e:聲明捕獲在一個局部變量e例外。通常在except塊的末尾刪除因此分配的局部變量(以防止參考週期);如果要使用except套件以外的異常,則需要將其存儲在新的變量中;這就是爲什麼exited是在except套件之外定義的單獨變量。

或者,您可以選擇使用add_help=False選項從function1 argparser中刪除-h交換機,然後在該處手動處理幫助。

+0

感謝。尋求幫助。我很欣賞提供的解決方案。我選擇將用法從第一個函數移到第二個函數,並關閉第一個函數中的用法。然後只有一個功能打印它的用法(我認爲這是從用戶的角度來看更清晰) – theAlse

3

argparse提供的幫助命令的默認實現顯示幫助消息並退出。您需要防止添加這些內容,並定義您自己的自定義參數,而不用退出即可顯示幫助。

首先,在創建解析器,以防止默認的實現被添加時,使用add_help=False關鍵字參數。然後通常添加自己的參數,當它發生時,請撥打parser.print_help()以顯示幫助消息。

parser = argparse.ArgumentParser(add_help=False) 
parser.add_argument('-h','--help', action='store_true') 

args = parser.parse_args(argv) 
if args.help: 
    parser.print_help() 
+0

感謝您的回覆。 – theAlse