2013-03-19 5 views
5

मैं अपने बुनियादी ढांचे के प्रबंधन के लिए स्क्रिप्ट और मॉड्यूल का एक सेट तैयार कर रहा हूं। चीजों को संगठित रखने के लिए मैं जितना संभव हो उतना प्रयास करना चाहता हूं और नई स्क्रिप्ट के लिए बॉयलर प्लेट को कम करना चाहता हूं।एकाधिक कस्टम मॉड्यूल द्वारा समर्थित कई स्क्रिप्ट में पायथन के Argparse का उपयोग

विशेष रूप से यहां तर्क ArgumentParser मॉड्यूल को समेकित करना है।

एक उदाहरण संरचना स्क्रिप्ट और पुस्तकालयों कुछ इस तरह का आयोजन किया है:

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

इस परिदृश्य script1 में केवल logger और lib1 का उपयोग कर सकते हैं, जबकि script2logger और lib2 का इस्तेमाल करते हैं जाएगा। दोनों मामलों में मैं लॉगर को '-v' और '-d' स्वीकार करना चाहता हूं, जबकि script1 अतिरिक्त तर्क और lib2 अन्य तर्क भी स्वीकार कर सकता है। मुझे पता है कि इससे टकराव हो सकता है और मैन्युअल रूप से इसका प्रबंधन करेगा।

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 माता-पिता = [पार्सर 1, पार्सर 2] कार्यक्षमता आपके लिए काम नहीं करती है - यह कैसे टूटती है? – babbageclunk

उत्तर

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... 
संबंधित मुद्दे