我使用了库标准和cmdargs。
当我在没有cmdargs的情况下完全编译程序并运行它时,例如./prog --help然后我从标准中得到一些关于可能的选项和运行次数等的不必要的响应。
当我编译并运行它时,我的代码首先选择命令行选项,然后按标准读取。 Criterion然后报告并且错误告诉我选项--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)]
答案 0 :(得分:11)
使用System.Environment.withArgs
。首先使用cmdArgs
解析命令行参数,然后将未使用的内容传递给criterion
:
main = do
(flags, remaining) <- parseArgsHowever
act according to flags
withArgs remaining $
defaultMain [ ... ]
答案 1 :(得分:3)
看看criterion source。您应该能够编写自己的defaultMainWith
函数来处理你想要的args,包括忽略它们,或忽略未知的args,等等......