2011-12-08 15 views
7

He utilizado el criterio de bibliotecas y cmdargs.Opciones de línea de comando recogidas por la biblioteca de criterios

Cuando compilo el programa completamente sin cmdargs y lo ejecuto, p. ./prog --help luego recibo alguna respuesta no deseada del criterio sobre las opciones posibles y el número de ejecuciones, etc.

Cuando compilo y lo ejecuto de la siguiente manera, primero selecciono las opciones de línea de comando por mi código luego lee por criterio Posteriormente, Criterion informa y comete un error al decirme que la opción --byte es desconocida. No he visto nada en la documentación del criterio de cómo se puede apagar o solucionar este problema. ¿Hay alguna manera de borrar las opciones de línea de comandos después de haberlas leído? De lo contrario, necesitaría usar, p. CPUTime en lugar de criterio, eso está bien para mí, ya que necesito realmente las cargas de funcionalidades y datos adicionales que ofrece el criterio.

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

Respuesta

11

Use System.Environment.withArgs. Analizar los argumentos de línea de comandos en primer lugar con cmdArgs, luego pasa lo que no has utilizado para criterion:

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

Me temo que no entiendo cómo aplicar esto a mi fragmento de código. –

+0

@JFritsch Bien, acabo de ver los documentos de cmdargs, si los incluyo bien, tendría que agregar un campo para otros argumentos a su tipo ('Strlen') y recogerlos allí con' args'. Sin embargo, no estoy seguro de qué hace cmdargs con las opciones desconocidas, qué argumentos de criterio serían. Si desea que el criterio simplemente use la configuración predeterminada, 'withArgs [] $ defaultMain ...' es simple y funciona. Si quiere pasar args fijas al criterio, 'withArgs [" -s "," 200 "]' p. Ej. –

+0

Obra por supuesto si importo System.Environment (withArgs). Me pregunto si hay algo más elegante que mantenga la inclinación binaria resultante. –

3

Tome un vistazo a la criterion source. Debería poder escribir su propia función defaultMainWith que maneje args como quiera, incluso ignorarlas, o ignorar argumentos desconocidos, o etc ...

Cuestiones relacionadas