2011-12-08 28 views
7

Tôi đã sử dụng tiêu chí thư viện và cmdarg.Tùy chọn dòng lệnh được chọn theo thư viện tiêu chí

Khi tôi biên dịch chương trình hoàn toàn không có cmdarg và chạy chương trình, ví dụ: ./prog --help sau đó tôi nhận được một số phản hồi không mong muốn từ tiêu chí về các tùy chọn có thể và số lần chạy, v.v.

Khi tôi biên dịch và chạy nó dưới các tùy chọn dòng lệnh trước tiên được chọn bởi mã của tôi sau đó đọc theo tiêu chí. Tiêu chí sau đó báo cáo và báo lỗi cho tôi biết rằng tùy chọn --byte không xác định. Tôi đã không thấy bất cứ điều gì trong tài liệu tiêu chuẩn làm thế nào điều này có thể được tắt hoặc làm việc xung quanh. Có cách nào để xóa các tùy chọn dòng lệnh ofter tôi đã đọc chúng? Nếu không, tôi sẽ cần phải sử dụng ví dụ: CPUTime thay vì tiêu chí, điều đó là phù hợp với tôi vì tôi thực sự yêu cầu vô số chức năng và dữ liệu bổ sung mà tiêu chí cung cấp.

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

Trả lời

11

Sử dụng System.Environment.withArgs. Phân tích các đối số dòng lệnh đầu tiên với cmdArgs, sau đó vượt qua những gì bạn chưa sử dụng để criterion:

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

Tôi sợ tôi không hiểu cách áp dụng điều này cho đoạn mã của mình. –

+0

@JFritsch Được rồi, tôi vừa xem các tài liệu cmdargs, nếu tôi đánh giá đúng chúng, bạn phải thêm một trường cho các đối số khác vào kiểu của bạn ('Strlen') và thu thập chúng bằng' args'. Tuy nhiên, tôi không chắc chắn những gì cmdargs không với các tùy chọn không rõ, mà các đối số tiêu chí sẽ được. Nếu bạn muốn tiêu chí chỉ sử dụng các thiết lập mặc định, 'withArgs [] $ defaultMain ...' rất đơn giản và hoạt động. Nếu bạn muốn chuyển arg cố định vào tiêu chí, 'withArgs [" -s "," 200 "]' ví dụ –

+0

Hoạt động của khóa học nếu tôi nhập System.Environment (withArgs). Tôi tự hỏi nếu có bất cứ điều gì thanh lịch hơn mà giữ nhị phân kết quả nạc. –

3

Hãy nhìn vào các criterion source. Bạn có thể viết hàm defaultMainWith của riêng bạn xử lý args theo bất kỳ cách nào bạn muốn, bao gồm bỏ qua chúng hoặc bỏ qua args không xác định, hoặc ...

Các vấn đề liên quan