.NET के लिए कमांड लाइन तर्क पार्सर की तलाश [बंद]


79

मैं एक कमांड लाइन तर्क पार्सर की तलाश कर रहा हूं, जैसे http://www.sellsbrothers.com/tools/Genghit/ से "कमांड लाइन पार्सर" ।

वे सुविधाएँ जो मैं देख रहा हूँ:

  • उपयोग की ऑटो पीढ़ी
  • आवश्यक और वैकल्पिक मापदंडों की जांच करने में सक्षम होना चाहिए
  • पैरामीटर को विभाजक समर्थन के साथ IEnumerable का समर्थन करना चाहिए
  • ध्वज के मापदंडों का समर्थन करना चाहिए
  • "/ Fx" == "/ f / x" जैसे संयोजन मापदंडों का समर्थन करना अच्छा रहेगा
  • किसी पैरामीटर के लिए "/ftest.txt" == "" / f test.txt जैसे पैरामीटर के बाद बल नहीं देना अच्छा रहेगा

पुनश्च: "कमांड लाइन पार्सर" काफी अच्छा है, मैं वास्तव में इसका डिज़ाइन पसंद करता हूं लेकिन कोई प्रलेखन नहीं है, कोई नया अपडेट नहीं है और मैं कुछ सामान करने के लिए समझ नहीं सका जैसे कि आवश्यक मापदंडों की जांच कैसे करें।


सबसे अधिक लचीली .NET कमांड लाइन पार्सर लगता है: gsscoder's CommandLineParser
AlexMelw

जवाबों:


52

मेरी निजी पसंदीदा 3 पार्टी कमांडलाइन पार्सिंग लाइब्रेरी कमांड लाइन पार्सर है और मुझे लगता है कि यह वही है जिसका आप उल्लेख कर रहे हैं। सबसे हालिया रिलीज़ 2 महीने पहले कम थी और नियमित रूप से कमिट हैं। यदि आप अधिक परिपक्व पेशकश चाहते हैं, तो आप मोनो परियोजना में कंसोल लाइब्रेरी को चबा सकते हैं (क्षमा करें, मैं फिलहाल नामस्थान का सीधा लिंक नहीं ढूंढ सकता हूं, लेकिन यह मोनो फ्रेमवर्क का एक हिस्सा है)


1
यह बहुत अच्छा लग रहा है मैं इसे आज़माऊँगा।
डॉ। बुराई

मैं इसे लागू करने की कोशिश कर रहा हूं, क्या यह "ध्वज" तर्कों का समर्थन करता है? जैसे "-enable" जिसके लिए किसी मूल्य की आवश्यकता नहीं है बस सही / गलत सामान। मैं इसे नहीं पा सका।
डॉ।

अगर मुझे सही याद है तो यह बॉक्स से बाहर नहीं है, लेकिन यह निर्दिष्ट करने के लिए सही / गलत होने की अपेक्षा बूलियन मानों के लिए अयोग्य स्विच देखने के लिए पार्सर को संशोधित करने के लिए बहुत अधिक काम नहीं होना चाहिए।
राउल

मोनो पार्सर को वैसे ही Mono.GetOptions कहा जाता है। वह निश्चित रूप से उस चीज का समर्थन करता है जिसे आप ढूंढ रहे हैं। आप मोनो फ्रेमवर्क स्रोत के सिर्फ उस हिस्से को डाउनलोड कर सकते हैं और इसका निर्माण कर सकते हैं और इसे एक प्रोजेक्ट के रूप में संदर्भित कर सकते हैं।
राउल

मैंने स्वयं इस पुस्तकालय का उपयोग किया है, और सहमत हूँ कि यह एक उत्कृष्ट पुस्तकालय है।
Noldorin

20

Ndesk.options पर एक नजर है।

इसे अब मोनो कहा जाता है ।


3
हमने बहुत सफलता के साथ ndesk.options का उपयोग किया है। यह एक एकल वर्ग है जिसे आप बस अपने कोड में संकलित कर सकते हैं: ndesk.org/Options
शॉन कारपेंटर

वर्तमान में, उनकी साइट पर NDesk.Options अस्थिर होने के बारे में चेतावनी है। बस एक चेतावनी ... शायद एक पुराने संस्करण का उपयोग करें।
Kilhoffer

मुझे एनडीएससी.ओउसेस के साथ भी अच्छा अनुभव रहा है। यह पर्ल के गेटटॉप पर बनाया गया है :: लॉन्ग (जो उत्कृष्ट है)।
jwd

5

एक लोकप्रिय और बहुत व्यापक सी कमांड लाइन पार्सर GNU गेटअप है । इसे कई बार C # / नेट के लिए पोर्ट (या क्लोन) किया गया है। इनमें से कुछ में शामिल हैं:

अपना चयन ले लो! कई अन्य हैं, और Google आपको उन लोगों के बारे में बता सकता है,


4

अफसोस की बात है कि मानक तरीके से निपटने के लिए कोई समर्थन नहीं है। क्या आपने PowerShell में देखा है? मुझे यकीन है कि उस शेल में एक वर्ग है जो वास्तव में वही चाहता है जो आप चाहते हैं या कुछ इसी तरह।


हाँ, PowerShell शायद ज्यादातर मामलों में जाने का तरीका है। एक cmdlet लिखना काफी आसान है, फिर भी बहुत सारी संभावनाओं को खोलता है, बहुत कम या बिना काम के।
जॉन सॉन्डर्स

मुझे पक्का नहीं है कि आप पॉवरशेल को देखकर क्या मतलब है। यह खुला स्रोत नहीं है या आपका मतलब है कि मुझे एक cmdlet मिल सकता है और इसे .NET सिंटैक्स में बदल सकता है।
डॉ।

3
मुझे लगता है कि उनका मतलब है "अपने कोड को पावरशेल सीएमडीलेट के रूप में लिखें, एक स्टैंड-अलोन निष्पादन योग्य के बजाय।"
जोएल मुलर

इन दिनों कार्रवाई की मेरी डिफ़ॉल्ट योजना कमांड लाइन उन्मुख कार्यक्रमों को पॉवरशेल cmdlets के रूप में लिखना है। इस तरह मुझे इस बारे में चिंता करने की ज़रूरत नहीं है कि कमांड लाइन कैसे पार्स की जाती है।
पीटर स्टीफेंस

मुझे लगता है कि पॉवरशेल की आर्ग पार्सिंग भयानक है।
टिम एबेल

2

संपादित करें: जैसे कि fatcat1111 बताते हैं, यह सुविधा .net 4.0 के अंतिम संस्करण के साथ जहाज नहीं गई थी।

C # 4.0 में बहुत अच्छा है। शायद अभी तक बहुत उपयोगी नहीं है, लेकिन आप कुछ ऐसा देखने पर विचार करना चाह सकते हैं, जो बाहर आने पर छलांग को एक आसान में बना देगा। बार्ट डी स्मेट ने इसके बारे में अपने B # ब्लॉग पर बात की


2
System.Shell.CommandLine फ्रेमवर्क के v4 से काटा जा रहा है।
जस्टिन आर


1

इस बात पर विचार करें कि एक बार जब आप इस पार्सर का उपयोग करना शुरू करते हैं, तो आपको या तो इसे स्वयं बनाए रखना होगा, या फिर किसी और पर निर्भर रहना होगा ताकि आप इसे बनाए रख सकें। आप अपने खुद के लेखन से बेहतर हो सकते हैं, अपने सबसे महत्वपूर्ण, तत्काल, आवश्यकताओं से शुरू कर सकते हैं। मैंने पाया है कि मेरे द्वारा काम किए गए अधिकांश कंसोल-आधारित अनुप्रयोगों के लिए कुछ काफी जटिल कमांड-लाइन पार्सिंग का उत्पादन करने में बहुत अधिक काम नहीं लगता है।

मैंने यह भी पाया है कि जब पार्सिंग बहुत जटिल हो जाती है, तो कमांड लाइन का उपयोग बंद करने का समय हो सकता है।


1
चूंकि यह एक अच्छी तरह से ज्ञात समस्या है और लगभग हर एक कमांडलाइन टूल के लिए जरूरी है, क्योंकि मैं यह मान रहा था कि कुछ परिपक्व समाधान होने चाहिए, और अपने स्वयं के ध्वनि को बनाए रखना और लिखना थोड़ा समय बिताना होगा। लेकिन हे, क्योंकि यहाँ पर्याप्त जवाब नहीं है शायद आप सही हैं।
डॉ। बुराई

1
@Downvoter: -2 प्रतिनिधि मुझे परेशान नहीं करता है। यदि आप एक अंतर बनाना चाहते हैं, तो कृपया पतन का कारण दें।
जॉन सॉन्डर्स

1

मैं शर्त लगा रहा हूँ यह वह नहीं है जो आप ढूंढ रहे हैं, लेकिन:

यहाँ किसी को वह समस्या थी, और उसका पहला विचार था "अरे, ओमालम के पास बहुत अच्छा है!", और जल्दी से इसे F # में पोर्ट किया।


+1 github.com/nessos/UnionArgParser एक बहुत अच्छा उदाहरण है
Ruben बार्टेलिंक

1

मैं सी # 3.0 कुकबुक से बाहर पार्सर का उपयोग कर रहा हूं।

इस पुस्तक के सभी उदाहरण यहां से डाउनलोड किए जा सकते हैं: http://examples.oreilly.com/9780596516109/

'तर्क' की खोज करें और आप इसे पा लेंगे। आपको पूरी कक्षा से इसे अपनी कक्षा में लाने के लिए कुछ छोटे कोड परिवर्तन करने होंगे, लेकिन यह कोई बड़ी समस्या नहीं है।

यह अंतिम दो को छोड़कर आपके सभी बिंदुओं का समर्थन करता है (पैरामीटर संयोजन और लापता स्थान)।


1

BizArk पुस्तकालय एक कमांड लाइन पार्सर शामिल हैं।

मूल रूप से आप बस एक वर्ग बनाते हैं जो CmdLineObject से विरासत में मिलता है, ऐसे गुण जोड़ें, जिन्हें आप कमांड-लाइन से पॉप्युलेट करना चाहते हैं, गुणों में CmdLineArgAttribute जोड़ें, फिर अपने प्रोग्राम में प्रारंभिक कॉल करें। यह ClickOnce URL तर्कों का भी समर्थन करता है!

सुविधाएँ (साइट से) ...

  • स्वचालित आरंभीकरण: क्लास गुण स्वचालित रूप से कमांड-लाइन तर्कों के आधार पर निर्धारित किए जाते हैं।
  • डिफ़ॉल्ट गुण: संपत्ति के नाम को निर्दिष्ट किए बिना एक मूल्य में भेजें।
  • मूल्य रूपांतरण: मानों को उचित प्रकार में परिवर्तित करने के लिए BizArk में शामिल शक्तिशाली ConvertEx वर्ग का उपयोग करता है।
  • बूलियन झंडे। झंडे को केवल तर्क का उपयोग करके निर्दिष्ट किया जा सकता है (उदाहरण के लिए, सच के लिए / और - झूठे के लिए बी) या मूल्य को सही / गलत, हां / नहीं, आदि जोड़कर।
  • तर्क सरण। एक सरणी के रूप में परिभाषित की गई संपत्ति सेट करने के लिए कमांड-लाइन नाम के बाद बस कई मान जोड़ें। Ex, / x 1 2 3, x को {1, 2, 3} सरणी के साथ आबाद करेगा (मानकर x को पूर्णांकों की एक सरणी के रूप में परिभाषित किया गया है)।
  • कमांड-लाइन उपनाम: एक संपत्ति इसके लिए कई कमांड-लाइन उपनामों का समर्थन कर सकती है। उदाहरण के लिए, मदद उपनाम का उपयोग करती है?
  • आंशिक नाम मान्यता। आपको पूरा नाम या उपनाम लिखने की आवश्यकता नहीं है, बस पार्सर के लिए दूसरों से संपत्ति / उपनाम को अलग करने के लिए पर्याप्त वर्तनी है।
  • ClickOnce का समर्थन करता है: जब वे ClickOnce परिनियोजित अनुप्रयोगों के लिए URL में क्वेरी स्ट्रिंग के रूप में निर्दिष्ट होते हैं, तब भी गुणों को प्रारंभ कर सकते हैं। कमांड-लाइन इनिशियलाइज़ेशन विधि यह पता लगाएगी कि यह क्लिकऑन के रूप में चल रहा है या नहीं, इसलिए इसका उपयोग करते समय आपके कोड को बदलने की आवश्यकता नहीं है।
  • स्वचालित रूप से / बनाता है? मदद: इसमें अच्छा स्वरूपण शामिल है जो कंसोल की चौड़ाई को ध्यान में रखता है।
  • किसी फ़ाइल में कमांड-लाइन तर्कों को लोड / सेव करें: यह विशेष रूप से उपयोगी है यदि आपके पास कमांड-लाइन तर्कों के कई बड़े, जटिल सेट हैं, जिन्हें आप कई बार चलाना चाहते हैं।

0

मैं ऑप्टपर्स के C # पोर्ट का प्रशंसक हूं, जो पायथन में लाइब्रेरी में बनाया गया है। यहां अन्य अधिकांश सुझावों की तुलना में इसका उपयोग करना सरल है और इसमें केवल ऑटो पार्सिंग के अलावा कई उपयोगी विशेषताएं हैं।


0

आप मेरी एक गली पसंद कर सकते हैं

प्रयोग करने में आसान और विस्तार योग्य कमांड लाइन तर्क पार्सर। हैंडल: बूल, प्लस / माइनस, स्ट्रिंग, स्ट्रिंग सूची, सीएसवी, एन्यूमरेशन।

'/' में निर्मित हेल्प मोड।

'/ ??' में निर्मित और '/? डी' दस्तावेज़ जनरेटर मोड।

static void Main(string[] args) 
{            
    // create the argument parser
    ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");

    // create the argument for a string
    StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");

    // add the argument to the parser 
    parser.Add("/", "String", StringArg);

    // parse arguemnts
    parser.Parse(args);

    // did the parser detect a /? argument 
    if (parser.HelpMode == false) 
    {
        // was the string argument defined 
        if (StringArg.Defined == true)
        {
            // write its value
            RC.WriteLine("String argument was defined");
            RC.WriteLine(StringArg.Value);
        }
    }
}

संपादित करें: यह मेरी परियोजना है और इस तरह के उत्तर को तीसरे पक्ष से समर्थन के रूप में नहीं देखा जाना चाहिए। मैंने कहा कि मैं इसे लिखने वाले प्रत्येक कमांड लाइन आधारित कार्यक्रम के लिए उपयोग करता हूं, यह खुला स्रोत है और यह मेरी आशा है कि अन्य लोग इससे लाभान्वित हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.