2011-12-08 17 views
7

द्वारा उठाए गए कमांड लाइन विकल्प मैंने पुस्तकालय मानदंड और cmdargs का उपयोग किया है।मानदंड लाइब्रेरी

जब मैं cmdargs बिना पूरी तरह से कार्यक्रम संकलन और यह उदा चलाने ./prog --help तो मुझे संभावित विकल्पों और रनों की संख्या आदि के बारे में मानदंड से कुछ अवांछित प्रतिक्रिया मिलती है ..

जब मैं संकलित करता हूं और कमांड लाइन विकल्पों के नीचे इसे चलाता हूं तो पहले मेरे कोड द्वारा उठाया जाता है फिर मानदंड द्वारा पढ़ें। बाद में मानदंड रिपोर्ट और त्रुटि मुझे बता रही है कि विकल्प --byte अज्ञात है। मैंने मानदंड दस्तावेज में कुछ भी नहीं देखा है कि इसे कैसे बंद किया जा सकता है या आसपास काम किया जा सकता है। क्या कमांड लाइन विकल्प को साफ़ करने का कोई तरीका है जिसे मैंने पढ़ा है? अन्यथा मुझे उदाहरण का उपयोग करना होगा मानदंड के बजाय CPUTime, यह मेरे लिए ठीक है क्योंकि मुझे वास्तव में अतिरिक्त कार्यक्षमता और डेटा के मानदंडों के भार की आवश्यकता होती है जो मानदंड प्रदान करता है।

{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE DeriveDataTypeable #-} 

import System.Console.CmdArgs 

data Strlen = Strlen {byte :: Int} deriving (Data, Typeable, Show) 

strlen = cmdArgsMode $ Strlen {byte = def} &= summary "MessagePack benchmark v0.04" 

main = do 
    n <- cmdArgsRun strlen 
    let datastring = take (byte n) $ randomRs ('a','z') (mkStdGen 3) 
    putStrLn "Starting..." 
    conn <- connect "192.168.35.62" 8081 
    defaultMain [bench "sendReceive" $ whnfIO (mywl conn datastring)] 

उत्तर

11

System.Environment.withArgs का उपयोग करें। cmdArgs के साथ पहली बार पार्स आदेश पंक्ति तर्क है, तो पारित आप criterion करने के लिए इस्तेमाल नहीं किया है क्या:

main = do 
    (flags, remaining) <- parseArgsHowever 
    act according to flags 
    withArgs remaining $ 
     defaultMain [ ... ] 
+0

मुझे डर है कि मुझे समझ में नहीं आता कि यह मेरे कोड स्निपेट पर कैसे लागू करें। –

+0

@JFritsch ठीक है, मैंने केवल cmdargs दस्तावेज़ों को देखा है, अगर मैं उन्हें सही समझता हूं, तो आपको अपने तर्क ('स्ट्रलेन') के अन्य तर्कों के लिए एक फ़ील्ड जोड़ना होगा और उन्हें वहां 'args' के साथ एकत्र करना होगा। हालांकि, मुझे यकीन नहीं है कि अज्ञात विकल्पों के साथ cmdargs क्या करता है, जो मानदंड तर्क होगा। यदि आप केवल डिफ़ॉल्ट सेटिंग्स का उपयोग करने के लिए मानदंड चाहते हैं, 'withArgs [] $ defaultMain ...' सरल और काम करता है। यदि आप मानदंडों के लिए निश्चित तर्क पारित करना चाहते हैं, 'withArgs ["-s", "200"] 'उदा। –

+0

पाठ्यक्रम का काम करता है अगर मैं सिस्टम आयात करता हूं। पर्यावरण (withArgs)। मुझे आश्चर्य है कि क्या कुछ और सुरुचिपूर्ण है जो परिणामस्वरूप बाइनरी दुबला रहता है। –

3

criterion source पर एक नजर डालें। आपको अपना खुद का defaultMainWith फ़ंक्शन लिखने में सक्षम होना चाहिए जो आप चाहते हैं कि तर्कों को अनदेखा करते हैं, या अज्ञात तर्कों को अनदेखा करते हैं, या आदि ...

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