Я очень плохо знаком с F # и пытаюсь создать консольное приложение, которое принимает параметры. Я нашел библиотеку Argu и пытался заставить работать простой пример. Следующее работает как исключение, если передано --commanda
или --commandb
аргументы, но я получаю исключение, если я пытаюсь --help
.
open System
open Argu
type CliArguments =
| CommandA
| CommandB
with
interface IArgParserTemplate with
member s.Usage =
match s with
| CommandA -> "CommandA - Do something"
| CommandB -> "CommandB - Do something"
[<EntryPoint>]
let main argv =
let parser = ArgumentParser.Create<CliArguments>()
let results = parser.Parse argv
results.GetAllResults()
|> List.iter (fun x ->
match x with
| CommandA -> printfn "CommandA"
| CommandB -> printfn "CommandB")
0
Исключение составляет:
> .\Argu_sample.exe --help
Unhandled Exception: Argu.ArguParseException: USAGE: Argu_sample.exe [--help] [--commanda] [--commandb]
OPTIONS:
--commanda CommandA - Do something
--commandb CommandB - Do something
--help display this list of options.
at Argu.ExceptionExiter.Argu-IExiter-Exit[a](String msg, ErrorCode errorCode)
at Argu.ArgumentParser`1.Parse(FSharpOption`1 inputs, FSharpOption`1 configurationReader, FSharpOption`1 ignoreMissing, FSharpOption`1 ignoreUnrecognized, FSharpOption`1 raiseOnUsage)
at Program.main(String[] argv) in C:\Data\FSharp\Argu-sample\Argu-sample\Program.fs:line 18
Что я делаю не так?
Спасибо.
ОБНОВЛЕННЫЙ КОД С РЕШЕНИЕМ:
Основываясь на комментариях AMieres, я использовал try with
:
open System
open Argu
type CliArguments =
| CommandA
| CommandB
with
interface IArgParserTemplate with
member s.Usage =
match s with
| CommandA -> "CommandA - Do something"
| CommandB -> "CommandB - Do something"
[<EntryPoint>]
let main argv =
let parser = ArgumentParser.Create<CliArguments>()
try
let results = parser.Parse argv
results.GetAllResults()
|> List.iter (fun x ->
match x with
| CommandA -> printfn "CommandA"
| CommandB -> printfn "CommandB")
0
with
| :? ArguParseException as ex ->
printfn "%s" ex.Message
1
| ex ->
printfn "Internal Error:"
printfn "%s" ex.Message
2