2013-03-30 38 views
4

我正在編寫一個簡單的Python腳本來導出,導入和區分數據庫。我想讓用戶提供他們想要運行腳本的「模式」,並選擇導入,導出和差異作爲我的選項。當我通過argparse運行它時,所有解析的選項都以args結尾,我可以使用arg.export或args.diff來訪問它們,但由於「import」是一個關鍵字,所以我遇到了問題。在argparse中使用python關鍵字作爲選項

我可以做一些改變,讓它工作,但我想知道是否有可能保留我擁有的東西。例如,我可以將選項縮短爲「exp」,「imp」和「diff」,或者我可以執行一個名爲「mode」的選項,該選項需要傳入「import」,「export」或「diff」。

我當前的代碼:

parser = argparse.ArgumentParser() 

group = parser.add_mutually_exclusive_group() 
group.add_argument("--export", help="Export source(s)", action="store_true") 
group.add_argument("--import", help="Import source(s)", action="store_true") 
group.add_argument("--diff", help="Diff sources", action="store_true") 

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.") 

args = parser.parse_args() 

if args.export: 
    export_sources(args.filename) 
elif args.import: 
    import_sources(args.filename) 
elif args.diff: 
    diff_sources(args.filename) 

回答

4

好吧,如果我用「目標」,我仍然可以使用--import,但它進入「小鬼」在內部。

parser = argparse.ArgumentParser() 

group = parser.add_mutually_exclusive_group() 
group.add_argument("--export", help="Export source(s)", action="store_true") 
group.add_argument("--import", dest="imp", help="Import source(s)", action="store_true") 
group.add_argument("--diff", help="Diff sources", action="store_true") 

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.") 

args = parser.parse_args() 

if args.export: 
    export_sources(args.filename) 
elif args.imp: 
    import_sources(args.filename) 
elif args.diff: 
    diff_sources(args.filename) 
1

您也可以訪問解析參數與getattr

parser = argparse.ArgumentParser() 
parser.add_argument('--import') 
args = parser.parse_args() 
import_value = getattr(args, 'import', None) # defaults to None 

或者檢查參數的存在,然後讀入一個變量:

# [...] 
if hasattr(args, 'import'): 
    import_value = getattr(args, 'import') 
相關問題