如何在Ballerina中实现类似Python argparse的命令行参数解析?
Ballerina 命令行命名参数解析实现方案
Ballerina 默认的主函数参数仅支持位置参数映射,要实现--name、--age这类命名参数的解析,需要使用官方标准库的 ballerina/cli 模块,具体实现方法如下:
完整实现代码
修改main.bal文件内容如下:
import ballerina/cli; import ballerina/io; // 标注当前主函数为CLI命令,开启命名参数解析能力 @cli:Command public function main( // 配置name参数对应长命名标志--name @cli:Option(long = "name") string? name, // 配置age参数对应长命名标志--age @cli:Option(long = "age") int? age ) returns error? { if name is string && age is int { io:println("Hello " + name); io:println("Age " + age.toString()); } return; }
运行验证
你期望的执行命令可以直接正常运行:
bal run main.bal -- --name John --age=18
运行后输出预期结果:
Hello John Age 18
原报错原因说明
之前运行报错是因为默认主函数不会识别
--开头的命名参数标志,会将--name直接当作第一个位置参数(匹配string类型的name字段),第二个参数John被匹配到int类型的age参数,类型不匹配就抛出了错误。
扩展能力说明
- 如需支持短参数,可在
@cli:Option中添加short配置,比如@cli:Option(long = "name", short = "n"),就可以通过-n John传递参数 - 可以给参数设置默认值,比如
@cli:Option(long = "age") int age = 18,不传age参数时会默认使用18 - 可通过
description配置给参数添加说明,执行bal run main.bal -- --help时会自动打印帮助文档
内容的提问来源于stack exchange,提问作者Festim Deari
相关产品推荐
相关产品推荐

