2011-12-08 20 views
7

Użyłem kryterium bibliotek i cmdargs.Opcje wiersza poleceń pobrane przez bibliotekę kryteriów

Gdy kompletnie skompiluję program bez programu cmdargs i uruchomię go np. ./prog - pomoc dostaję niechcianą odpowiedź od kryterium o możliwych opcjach i liczbie uruchomień itp.

Kiedy kompiluję i uruchamiam tak jak poniżej opcje linii poleceń są najpierw odbierane przez mój kod, następnie następnie odczytaj według kryterium. Kryterium następnie zgłosiło i błąd informujący mnie, że opcja - bajt jest nieznana. W dokumentacji kryterium nie widziałem niczego, jak można by wyłączyć lub przepracować. Czy istnieje sposób, aby wyczyścić opcje wiersza poleceń, które przeczytałem? W przeciwnym razie musiałbym użyć np. CPUTime zamiast kryterium jest dla mnie OK, ponieważ naprawdę wymagam mnóstwa dodatkowych funkcjonalności i danych, które zapewnia to kryterium.

{-# 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)] 

Odpowiedz

11

Użyj System.Environment.withArgs. Analizowania argumentów wiersza poleceń najpierw cmdArgs, a następnie przekazać to, czego nie był używany do criterion:

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

Obawiam się, że nie rozumiem, jak zastosować to do mojego fragmentu kodu. –

+0

@JFritsch Po prostu przyjrzałem się dokumentacjom cmdargs, jeśli dobrze je zrozumiem, musiałbyś dodać pole dla innych argumentów do twojego typu ('Strlen') i zebrać je tam z' args'. Jednak nie jestem pewien, co robi cmdargs z nieznanymi opcjami, które argumenty byłyby kryterium. Jeśli chcesz, aby kryterium używało domyślnych ustawień, 'withArgs [] $ defaultMain ...' jest proste i działa. Jeśli chcesz przekazać ustalone argumenty do kryterium, to 'withArgs [" -s "," 200 "]' np. –

+0

Działa oczywiście, jeśli importuję System.Environment (withArgs). Zastanawiam się, czy istnieje coś bardziej eleganckiego, który utrzymuje wynikowy binarny chude. –

3

Spójrz na criterion source. Powinieneś być w stanie napisać własną funkcję defaultMainWith, która obsługuje args jak chcesz, włączając ignorowanie ich lub ignorowanie nieznanych argumentów, lub ...

Powiązane problemy