如何在F#的Argu库中为--help添加Examples示例章节?
在Argu的--help输出中添加Examples章节的方法
Argu支持通过自定义帮助文本生成器扩展默认的--help输出,以下是具体实现步骤:
1. 定义CLI参数类型(已实现可跳过)
确保你已经定义了符合IArgParserTemplate的参数类型,示例如下:
open Argu type CLIArguments = | [<AltCommandLine("-w")>] Working_Directory of path:string | [<AltCommandLine("-l")>] Listener of host:string * port:int | [<AltCommandLine("-d")>] Data of base64:string | [<AltCommandLine("-p")>] Port of tcpPort:int | [<AltCommandLine("-log")>] Log_Level of level:string | [<AltCommandLine("-det")>] Detach | [<CliPrefix(CliPrefix.None)>] Help interface IArgParserTemplate with member s.Usage = match s with | Working_Directory _ -> "指定工作目录。" | Listener _ -> "指定监听器(主机名:端口)。" | Data _ -> "Base64编码的二进制数据。" | Port _ -> "指定主端口。" | Log_Level _ -> "设置日志级别。" | Detach -> "将守护进程与控制台分离。" | Help -> "显示选项列表。"
2. 创建自定义帮助文本生成器
继承Argu的HelpTextGenerator类,重写GenerateText方法,在默认帮助文本后追加Examples章节:
type CustomHelpTextGenerator() = inherit HelpTextGenerator() override this.GenerateText(parser: ArgumentParser<_>, args: ParseResults<_>, format: HelpTextOutputFormat) = // 获取默认生成的帮助文本 let defaultHelpContent = base.GenerateText(parser, args, format) // 自定义Examples章节内容 let examplesSection = """ EXAMPLES: # 基础启动:指定工作目录与端口 gadget.exe --working-directory ./runtime-data --port 8080 # 带监听器的调试模式 gadget.exe --listener 0.0.0.0 9090 --log-level debug # 后台守护进程模式 gadget.exe --detach --log-level info """ // 拼接默认内容与自定义章节 defaultHelpContent + examplesSection
3. 使用自定义生成器初始化参数解析器
在创建ArgumentParser实例时,通过helpTextGenerator参数指定自定义生成器,这样--help输出就会包含Examples章节:
[<EntryPoint>] let main argv = // 初始化带自定义帮助生成器的解析器 let parser = ArgumentParser.Create<CLIArguments>(helpTextGenerator = CustomHelpTextGenerator()) try let results = parser.Parse(argv) // 处理帮助请求 if results.Contains Help then printfn "%s" (parser.PrintUsage()) 0 else // 此处添加业务逻辑处理 0 with | :? ArguParseException as ex -> printfn "%s" ex.Message 1
效果说明
运行gadget.exe --help时,输出会在默认OPTIONS章节后自动追加你定义的EXAMPLES内容,完全符合需求格式。
内容的提问来源于stack exchange,提问作者inwenis
相关产品推荐
相关产品推荐

