2012-01-16 13 views
9

मैं अपने क्ली पैरामीटर स्ट्रिंग को पार्स करने के लिए पायथन Argparse मॉड्यूल का उपयोग करना चाहता हूं। यह पैरामीटर टर्मिनल से पास के लिए काम करता है, लेकिन किसी दिए गए स्ट्रिंग के साथ नहीं।एक पूर्वनिर्धारित तर्क स्ट्रिंग के साथ पाइथन के Argparse का उपयोग कैसे कर सकते हैं?

~/someTestFile 
usage: argparsetest.py [-h] param 
argparsetest.py: error: unrecognized arguments: o m e T e s t F i l e 

~/someTestFile किसी भी तरह o m e T e s t F i l e में तब्दील हो जाता है:

import argparse 

parser = argparse.ArgumentParser(description='Argparse Test script') 
parser.add_argument("param", help='some parameter') 

argString = 'someTestFile' 
print(argString) 

args = parser.parse_args(argString) 

अगर मैं इस स्क्रिप्ट को चलाने मैं इस उत्पादन मिलता है। जैसा कि पहले से ही उल्लेख किया गया है, यह काम करता है अगर मैं टर्मिनल से फ़ाइल नाम पास करता हूं।

मैं कल्पना कर सकता था कि इसमें स्ट्रिंग एन्कोडिंग के साथ कुछ करना है। क्या किसी को यह पता है कि इसे कैसे ठीक किया जाए?

+0

आप [argparse दस्तावेज़ीकरण] (http://docs.python.org/library/argparse.html#parsing-arguments) पर एक नज़र डालना चाहते हैं। –

उत्तर

19

आह, नहीं, नहीं। parser.parse_args()sys.argv[1:] के समान रूप में एक अनुक्रम की अपेक्षा करता है। यदि आप एक sys.argv अनुक्रम की तरह एक स्ट्रिंग का इलाज करते हैं, तो आपको ['s', 'o', 'm', 'e', 'T', 'e', 's', 't', 'F', 'i', 'l', 'e'] मिलता है। '' प्रासंगिक तर्क बन जाता है, और फिर शेष स्ट्रिंग अचूक है।

इसके बजाय, आप शायद बस डिफ़ॉल्ट sys.argv तरह parser.parse_args(['someTestFile'])

+0

धन्यवाद! वह यह था…! – thorink

4

में पास करना चाहते हैं अपने तर्क के रूप में अच्छी तरह से एक सूची होना जरूरी एक सूची है,।

args = parser.parse_args([argString]) 
16

एक और विकल्प shlex.split का उपयोग करना है। यह विशेष रूप से बहुत अगर आप वास्तविक CLI तर्क स्ट्रिंग है सुविधाजनक:

import shlex 
argString = '-vvvv -c "yes" --foo bar --some_flag' 
args = parser.parse_args(shlex.split(argString)) 
+1

धन्यवाद! यह बहुत उपयोगी है। अब मैं कमांड लाइन के साथ-साथ अन्य पायथन स्क्रिप्ट से भी चला सकता हूं! – Sudhi

+0

कोई व्यक्ति कृपया इस आदमी को एक कुकी दें –

0

सीधे शब्दों में split अपने कमांड स्ट्रिंग:

args = parser.parse_args(argString.split()) 

एक पूरा उदाहरण का प्रदर्शन करने के:

import argparse 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--dummy_opt', nargs='*', type=int, help='some ids') 
    argString = "--dummy_opt 128 128" 
    args = parser.parse_args(argString.split()) 

    print(args) 

इच्छा उत्पादन:

Namespace(pic_resize=[128, 128])

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