2012-01-31 16 views
5

के साथ छेड़छाड़ वाले तर्क छोड़ दें, मैं उन तर्कों का विश्लेषण करने के लिए argparse का उपयोग करना चाहता हूं जो इसे जानता है और फिर शेष छूटे रहें। उदाहरण के लिए मैंargparse

performance -o output other_script.py -a opt1 -b opt2 

कौन सा -o विकल्प का उपयोग करता है और बाकी अछूता छोड़ देता है चलाने के लिए सक्षम होना चाहता हूँ।

मॉड्यूल profiler.py optparse के साथ एक समान बात करता है, लेकिन जब से मैं argparse उपयोग कर रहा हूँ मैं कर रहा हूँ:

def parse_arguments(): 
    parser = new_argument_parser('show the performance of the given run script') 
    parser.add_argument('-o', '--output', default='profiled.prof') 

    return parser.parse_known_args() 

def main(): 
    progname = sys.argv[1] 
    ns, other_args = parse_arguments() 
    sys.argv[:] = other_args 
भी काम करने के लिए लगता है, लेकिन क्या होता है अगर यह भी भी other_script.py कौन सा

-o ध्वज है?

क्या इस समस्या को हल करने के लिए सामान्य रूप से एक बेहतर तरीका है?

उत्तर

5

argparse ईओएफ या -- तक तर्क का विश्लेषण करना बंद कर देगा। आप argparse द्वारा पार्स beeing बिना तर्क करना चाहते हैं, तो आप लिख सकते हैं ::

python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE] 
+0

आह कि धन्यवाद के बारे में पता नहीं था! एक मार्कर के बिना यह वास्तव में समझने के लिए बहुत मुश्किल होगा कि मुझे क्या लगता है, यह एक आसान समस्या नहीं है .. –

+0

यह स्पष्ट किया जाना चाहिए कि आपको 'parse_known_args()' विधि (कम से कम python3 पर) का उपयोग करने की आवश्यकता है। 6) – krishonadish

12

तुम भी, nargs=argparse.REMAINDER के साथ अपने पार्सर के लिए एक स्थितीय तर्क जोड़ सकते हैं स्क्रिप्ट और इसके विकल्प पर कब्जा करने की:

# In script 'performance'... 
p = argparse.ArgumentParser() 
p.add_argument("-o") 
p.add_argument("command", nargs=argparse.REMAINDER) 
args = p.parse_args() 
print args 

ऊपर कम से कम स्क्रिप्ट चल रही है ...

$ performance -o output other_script.py -a opt1 -b opt2 
Namespace(command=['performance', '-a', 'opt1', '-b', 'opt2'], o='output') 
+1

भी 'parse_known_args' यह करना चाहिए। –

+0

ऐसा लगता है कि यह भी '-' बरकरार है। उत्तम! – user1338062

संबंधित मुद्दे