2013-03-19 26 views
5

我建立了一套腳本和模塊來管理我們的基礎設施支持多種腳本argparse。爲了保持組織性,我希望儘可能地整合並最小化新版腳本的鍋爐板。使用Python在多個自定義模塊

尤其是這裏的問題是鞏固ArgumentParser模塊。

一個例子結構是有這樣一些組織腳本和庫:

|-- bin 
    |-- script1 
    |-- script2 
|-- lib 
    |-- logger 
    |-- lib1 
    |-- lib2 

在這種情況下script1可能只利用loggerlib1,而script2將利用loggerlib2。在這兩種情況下,我想記錄儀接受「-v」和「-d」,而script1也可能會接受額外的參數和其他lib2 ARGS。我知道這可能會導致衝突並將手動管理。

SCRIPT1

#!/usr/bin/env python 
import logger 
import lib1 
argp = argparse.ArgumentParser("logger", parent=[logger.argp]) 

SCRIPT2

#!/usr/bin/env python 
import logger 
import lib2 

記錄

#!/usr/bin/env python 
import argparse 
argp = argparse.ArgumentParser("logger") 
argp.add_argument('-v', '--verbose', action="store_true", help="Verbose output") 
argp.add_argument('-d', '--debug', action="store_true", help="Debug output. Assumes verbose output.") 

每個腳本和lib合作ULD可能有它自己的論據,但是,這些都會有被合併到

我嘗試迄今已導致未能繼承一個最終arg_parse()/延長argp設置。這怎麼能在庫文件和腳本之間完成?

+0

你說argparse父母= [parser1,parser2]功能沒有爲你工作 - 它如何中斷? – babbageclunk 2013-03-19 08:45:09

回答

6

的最簡單的方法是通過具有接受一個ArgumentParser實例,並將其自己的參數給它的每個模塊中的方法。

# logger.py 
def add_arguments(parser): 
    parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output") 
    # ... 

# lib1.py 
def add_arguments(parser): 
    parser.add_argument('-x', '--xtreme', action="store_true", help="Extremify") 
    # ... 

每個腳本將創建自己的ArgumentParser,將它傳遞到提供參數每個模塊,然後加上自己的具體參數。

# script1.py 
import argparse, logger, lib1 
parser = argparse.ArgumentParser("script1") 
logger.add_arguments(parser) 
lib1.add_arguments(parser) 
# add own args...