【问题标题】:Command line options picked up by criterion library标准库选择的命令行选项
【发布时间】:2012-01-16 02:49:54
【问题描述】:

我已经使用了库标准和 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)] 

【问题讨论】:

    标签: haskell criterion


    【解决方案1】:

    使用System.Environment.withArgs。先用cmdArgs解析命令行参数,然后把你没用过的传给criterion

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

    【讨论】:

    • 恐怕我不明白如何将此应用于我的代码 sn-p。
    • @JFritsch 好的,我刚刚查看了 cmdargs 文档,如果我理解正确,您必须为您的类型 (Strlen) 添加其他参数的字段并收集它们那里有args。但是,我不确定 cmdargs 对未知选项有什么作用,哪些标准参数会是。如果您希望标准只使用默认设置,withArgs [] $ defaultMain ... 很简单并且有效。如果您想将固定参数传递给标准,withArgs ["-s","200"] 例如
    • 如果我导入 System.Environment ( withArgs ) 当然可以。我想知道是否有任何更优雅的方法可以使生成的二进制文件保持精简。
    【解决方案2】:

    看看criterion source。您应该能够编写自己的 defaultMainWith 函数来处理您想要的 args,包括忽略它们,或忽略未知的 args,等等......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多