2012-07-03 11 views
12

बिना वैकल्पिक तर्क argparse मैं निम्न सिंटैक्स करना चाहते हैं:पायथन: डैश

python utility.py file1 FILE1 file2 FILE2 

जहां file1 और करें 2 वैकल्पिक तर्क हैं। ,

python utility.py --file1 FILE1 --file2 FILE2 

तथापि

parser.add_argument('--file1',type=file) 
parser.add_argument('--file2',type=file) 

का उपयोग कर, अगर मैं डैश को दूर argparse एक स्थितीय बजाय वैकल्पिक तर्क के रूप में यह interprete करने के लिए शुरू होता है ...: यह यह इस वाक्य रचना के साथ काम करने के लिए सरल है

दूसरे शब्दों में, क्या यह विशेष रूप से तर्क देना संभव है कि कोई तर्क वैकल्पिक या स्थितित्मक है ताकि मेरे पास डैश के बिना वैकल्पिक पैरामीटर हो सकें?

+2

वाक्य रचना (कोई डैश) नरक के रूप में भ्रामक है कि! सम्मेलन मौजूद एक कारण है। –

+1

@MartijnPieters: यह भ्रमित हो सकता है लेकिन कुछ वैज्ञानिक अनुप्रयोगों के लिए यह एक मानक है ... [उदाहरण] (http://www.ccp4.ac.uk/html/refmac5/description.html) – jvm

+1

@MartijnPieters: counterexample: 'गिट' या 'svn' कमांड लाइन इंटरफ़ेस। –

उत्तर

4

आपके लिए यह करने के लिए argparse प्राप्त करने का कोई तरीका नहीं है। हालांकि, अगर आप कर सकते हैं argparse स्थितीय तर्क के किसी भी संख्या स्वीकार करते हैं: आदि

parser.add_argument('FILES',nargs='*') 
options=parser.parse_args() 
file1,optional_files=options.FILES[0],options.FILES[1:] 
बेशक

, आपको लगता है कि कम से कम 1 फ़ाइल दिया गया था सुनिश्चित करने के लिए कुछ जांच जोड़ना चाहते हैं,

संपादित

मैं अभी भी नहीं 100% यकीन है कि आप यहाँ क्या चाहते हैं, लेकिन अगर file1 और file2 शाब्दिक तार कर रहे हैं, आपको लगता है कि आस-पास काम कर सकते हैं sys.argv preprocessing द्वारा एक छोटा सा। बेशक, यह अभी भी अजीब आपकी मदद के संदेश स्वरूप होगा, लेकिन आप हमेशा समझा है कि या तो प्रपत्र ठीक है एक परिशिष्ट भाग जोड़ सकते हैं:

import argparse 
import sys 

mangle_args=('file1','file2') 
arguments=['--'+arg if arg in mangle_args else arg for arg in sys.argv[1:]] 

parser=argparse.ArgumentParser() 
parser.add_argument('--file1') 
parser.add_argument('--file2') 
options=parser.parse_args(arguments) 
+0

स्थितित्मक तर्क मेरे लिए पर्याप्त नहीं हैं। उदाहरण के लिए, फ़ाइल 1 छोड़ा जा सकता है, फ़ाइल 2 इनपुट किया गया है, फ़ाइल 3 छोड़ा गया है, फ़ाइल 4 इनपुट किया गया है और असाइनमेंट महत्वपूर्ण है (यानी मुझे यह जानना होगा कि यह फ़ाइल 2 और फ़ाइल 4 था जो उपयोगकर्ता द्वारा निर्दिष्ट किया गया था) – jvm

+1

@jvm - argparse (या कुछ भी) यह जानना चाहिए कि आपके द्वारा दी गई फ़ाइल 'file1' के बजाय' file2' है? यदि आप कमांडलाइन पर ऑर्डर से इसे सॉर्ट नहीं कर सकते हैं, निश्चित रूप से 'argparse' इसे भी नहीं कर सकता है। – mgilson

+0

'file1' और' file2' निरंतर तार हैं, या वे फाइलों के नाम हैं - शायद यही वह है जो मैं समझ नहीं रहा हूं ... – mgilson

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