2013-08-10 10 views
18

पाइथन और Argparse का उपयोग करते हुए, उपयोगकर्ता ध्वज के रूप में -d के साथ फ़ाइल नाम इनपुट कर सकता है।Argparse इनपुट

parser.add_argument("-d", "--dmp", default=None) 

हालांकि, पथ में रिक्त स्थान शामिल होने पर यह असफल रहा। जैसे

-d C:\SMTHNG\Name with spaces\MORE\file.csv 

नोट: रिक्त स्थान में त्रुटि होगी (झंडा केवल इनपुट के रूप में 'सी: SMTHNG \ Name' में लेता है)।

error: unrecognized arguments: with spaces\MORE\file.csv 

मुझे समय लगा की तुलना में यह ... (एक क्यू & एक इसके लिए तो मैं अपने खुद के पोस्ट बना रही हूँ नहीं मिला)

उत्तर

16

सरल समाधान इस समस्या का समाधान खोजने के लिए होना चाहिए : Argparse एक स्पेस भरे स्ट्रिंग को एक तर्क के रूप में मानता है यदि यह उद्धरण चिह्नों द्वारा encapsulated है।

इस इनपुट काम किया है और "हल" समस्या:

-d "C:\SMTHNG\Name with spaces\MORE\file.csv" 

नोटिस: तर्क "है" इसके चारों ओर।

+0

"यहाँ एक स्ट्रिंग जाता है" हम आम तौर पर यहाँ पढ़ें ... आपका जवाब को स्वीकार करने के लिए स्वतंत्र महसूस: डी – Jblasco

+7

यह argparse के बारे में नहीं है; इस प्रकार अधिकांश प्रणालियों पर शैल पार्स तर्क (और उन प्रणालियों पर नकली शैल-स्टाइल-पार्सिंग कैसे प्रोग्राम करते हैं जिनके असली गोले नहीं हैं)। जब तक आप 'argparse' मॉड्यूल पर जाते हैं, तब तक आपका मूल संस्करण 4 अलग-अलग तर्क होता है, और Argparse इसके बारे में कुछ भी नहीं कर सकता है। – abarnert

+0

@abarnert, इनपुट के लिए धन्यवाद। –

20

जो लोग तर्क पार्स नहीं कर सकता है और अभी भी मिल के लिए "त्रुटि: अमान्य कर दिया गया तर्क:":

parser.add_argument('-d', '--dmp', nargs='+', ...) 
opts = parser.parse_args() 

और फिर जब आप इसे उपयोग करना चाहते हैं तो बस करना

' '.join(opts.dmp) 
+3

यह उत्तर स्वीकृत एक से बेहतर है। – FuzzyAmi

+0

क्या होगा यदि मेरे पास एक स्ट्रिंग है: महोदया जिसमें मध्य में एक एस्ट्रोफ़े (') है? – dorado

+1

@FuzzyAmi यह बेहतर नहीं है। यह सिर्फ इसे पूरा करता है। मुझे दोनों जवाब पसंद हैं। मैंने वास्तव में स्वीकृत उत्तर का चयन किया। –

1
मैं एक समाधान पाया

आज भी इस समस्या में फंस गया।

-d "foo bar" 

मदद नहीं की। मुझे बराबर चिह्न

-d="foo bar" 

और फिर यह काम करना पड़ा।

+0

आपका सेटअप क्या है? RHEL6 पर –

+0

पायथन 3.5.1 –

0

कुछ प्रयोगों के बाद (पायथन 2.7 विन 10) मुझे पता चला कि सुनहरा नियम उद्धरणों ("") को तर्कों के आस-पास रखना है जिसमें रिक्त स्थान हैं और तर्क में कोई रिक्त स्थान नहीं है। भले ही आप एक स्ट्रिंग/पथ गुजर रहे हों। एक सिंगल कोट्स ('') डालना भी कम से कम विंडोज के लिए एक बुरा विचार है।

छोटे उदाहरण: अजगर script.py --path .... \ Some_Folder \ --string