scala解析命令行参数详解

如何用scala解析命令行参数:

首先,需要在项目中添加Apache Commons CLI库的依赖。可以在pom.xml中加,

也可以在build.sbt文件中添加如下行:

libraryDependencies += "commons-cli" % "commons-cli" % "1.4"

下面是一个解析命令行参数的简单例子:

import org.apache.commons.cli.{Options, CommandLineParser, DefaultParser, HelpFormatter, ParseException}object CommandLineParserExample {def main(args: Array[String]): Unit = {// 创建Options对象,用于存储命令行选项// 第一二个参数分别代表参数的短名和长名字,都可以匹配,第三个参数是是否接受参数// 比如只接受参数名不接受参数 例如-helpval options = new Options()options.addOption("h", "help", false, "显示帮助信息")options.addOption("f", "file", true, "指定文件路径")// 创建命令行解析器val parser: CommandLineParser = new DefaultParser()try {// 解析命令行参数val cmd = parser.parse(options, args)// 检查是否包含帮助选项if (cmd.hasOption("h")) {printHelp(options)} else {// 获取文件路径选项的值val filePath = cmd.getOptionValue("f")println(s"指定的文件路径是:$filePath")}} catch {case e: ParseException =>println(s"解析命令行参数时发生错误:${e.getMessage}")printHelp(options)}}// 显示帮助信息def printHelp(options: Options): Unit = {val formatter = new HelpFormatter()formatter.printHelp("CommandLineParserExample", options)}
}

 还有另一种写法:(这边会演示你命令行需要传什么样的参数进去)

import org.apache.commons.cli.{CommandLine, DefaultParser, Options, Option, ParseException}object CommandLineParser {def main(args: Array[String]): Unit = {val options = new Options()options.addOption(Option.builder("f").longOpt("foo").desc("foo is an integer property").hasArg().argName("foo").build())options.addOption(Option.builder("b").longOpt("bar").desc("bar is a string property").hasArg().argName("bar").build())options.addOption(Option.builder("z").longOpt("baz").desc("baz is a boolean property").build())val parser = new DefaultParser()try {val cmd: CommandLine = parser.parse(options, args)val fooValue = if (cmd.hasOption("f")) cmd.getOptionValue("f").toInt else -1val barValue = if (cmd.hasOption("b")) cmd.getOptionValue("b") else ""val bazValue = cmd.hasOption("z")val config = Config(fooValue, barValue, bazValue)// Do something with the parsed configurationprintln(config)} catch {case e: ParseException =>// Handle parsing exceptionprintln("Error parsing command line: " + e.getMessage)}}case class Config(foo: Int = -1, bar: String = "", baz: Boolean = false)
}

在这个例子中,args 参数是一个 String[],表示命令行传递给程序的参数。parser.parse(options, args) 方法将解析这些参数并返回一个 CommandLine 对象,你可以通过它来获取每个选项的值。

例如,你可以在命令行运行程序并传递参数:

java -jar YourApp.jar -f 42 -b "example" -z

后面跟的就是一个数组

在这个例子中,args 数组将包含 ["-f", "42", "-b", "example", "-z"]parser.parse(options, args) 将解析这些参数,并你可以使用 cmd.getOptionValue("f") 等方法获取相应选项的值。

参数应该传什么样的,参数名前面一定要加 “-”?

在常见的命令行规范中,命令行参数通常使用短选项(short options)和长选项(long options)。短选项通常由一个短横线 - 后跟一个单个字母组成,而长选项则由两个短横线 -- 后跟一个或多个字母、数字或横线组成。

例如,在以下命令中:

scala CommandLineParserExample.scala -f /path/to/file.txt

-f 就是一个短选项,表示后面将提供一个文件路径。短选项通常用于单个字符的标识,而长选项则用于更具描述性的标识。

在某些情况下,参数可能不需要前缀横线。这取决于你的命令行解析库和程序的要求。有些库允许在参数前面使用横线,有些则不允许。通常,使用横线是为了明确表示这是一个选项而不是参数值。

例如,如果使用的是 Apache Commons CLI 中的 OptionsDefaultParser,则通常期望参数前面有横线。如果你省略了横线,解析库可能无法正确识别参数。

总的来说,具体是否需要在参数前面加横线取决于你使用的命令行解析库和程序的设计要求。在上述示例中,-f 是一个短选项,符合通常的命令行风格。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS第一课-对比Kotlin,快速入门TypeScript

编程语言简介 基础类型 1. 布尔值 TypeScript 和 Kotlin: 两者都有 boolean 类型,用于表示 true 或 false。 ts示例: let isDone:boolean falsekotlin示例: val isDone: Boolean false2. 数字 TypeScript: 有 number 类型&#xff0c…

hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)

1. 配置了三台服务器,hadoop22, hadoop23, hadoop24 2. hadoop文件路径: /opt/module/hadoop-3.3.4 3. hadoop22机器配置历史服务器的配置文件: 文件路径:/opt/module/hadoop-3.3.4/etc/hadoop 文件名称:mapred-size.xml 新增历…

帮我想几个关于实人认证API的中文文章标题

引言 随着信息时代的迅速发展,数据变得愈加庞大和复杂。在这个大数据的时代,企业面临着海量信息的管理和利用挑战。为了更有效地获取并利用数据,企业信息模糊搜索API成为了企业数据智能引擎的一部分,为企业提供了精准的企业列表检…

RK3588产测软件介绍

1. 简介 本公司研发的产测软件是用于在量产的过程中快速地甄别产品功能和器件的好坏,即重点 FCT(Functional Test)测试,进而提高生产效率和检测的准确性。 2. 产测软件介绍 QT开发的ARM平台产测图形化软件,一键开启傻…

【问题处理】WPS提示不能启动此对象的源应用程序如何处理?

哈喽,大家好,我是雷工! 最近在用WPS打开word文件中,插入的Excel附件时,无法打开,提示:“不能启动此对象的源应用程序”。 经过上网查找处理办法,尝试解决,现将解决过程记…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 系列文章目录

系列文章目录 第一章 技术栈简介 (开篇) 第二章 环境部署 (Node等环境安装) 第三章 项目创建 (Vite项目初始化) 第四章 认识项目目录 第五章 Element-Plus组件库安装和使用 第六章 样式格式化 (Sass) 第七章 路由配置 (vue-router路由守卫) 第八章 请求配置 (Axios请求和响应拦…

大模型LLM 在线量化;GPTQ\AWQ量化及推理

1、大模型LLM 在线量化 参考:https://www.cnblogs.com/bruceleely/p/17348782.html ##8bit model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half(

HDR相关文章收集

一文分清HDR10/HDR10/Dolby Vision 什么是4K HDR?HDR10、HDR10 PRO、杜比视界HDR区别 HDR中显示器标准和视频编码标准 芯片支持HDR解码 HDR详解 HDR技术趋势浅析 BT.2100 HDR 基本规范 图形图像基础知识(5)---- HDR 基本概念

Linux socket编程(4):服务端fork之僵尸进程的处理

在上一节利用fork实现服务端与多个客户端建立连接中,我们使用fork函数来实现服务端既可以accept新的客户端连接请求,又可以接收已连接上的客户端发来的消息。但在Linux中,在子进程终止后,父进程需要处理该子进程的终止状态&#x…

ChatGLM3-6B安装

1 CentOS7 安装Python 10 1.1 安装基础环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel1.2 升级 OpenSSL 不升级 OpenSSL,pip instal…

【开源】基于Vue.js的车险自助理赔系统的设计和实现

项目编号: S 018 ,文末获取源码。 \color{red}{项目编号:S018,文末获取源码。} 项目编号:S018,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

[GFCTF 2021]wordy 编写去花IDAPYTHON

首先查壳 发现没有东西 然后放入ida 发现没有main并且软件混乱 发现这里1144的地方 出错 IDA无法识别数据 报错内容是EBFF 机器码 这里看了wp知道是很常见的花指令 所以我们现在开始去花 这里因为我们需要取出 EBFF 下面的地址也都是 EBFF 所以工作量大 使用IDApython脚本即…

EasyRecovery2024最新永久破解版本安装包下载

当我们处理重要的文件数据时,遇到突然停电导致数据来不及保存,再次打开电脑后,此前处理的数据可能丢失,这无疑会影响我们的工作进度,数据恢复软件在此时就派上用场,那么下面就来具体介绍EasyRecovery软件的…

FL Studio21怎么破解?2024年最新FLStudio21.2.0安装解锁特别版下载使用图文教程

用FL Studio编曲,让音乐成为你的翅膀,飞翔在无尽的创作海洋中吧! FL Studio作为一款功能强大且备受赞誉的音乐制作软件,为你提供了一个独特的创作平台。通过FL Studio,你可以自由地创作、编曲,制作属于自己…

4.6 Windows驱动开发:内核遍历进程VAD结构体

在上一篇文章《内核中实现Dump进程转储》中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚拟地址描述符,VAD是一个AVL自平衡二叉树,树的每一个节点代表一段虚…

API测试:了解API接口测试与API接口测试指南

本文为您提供API接口测试的全面指南。从基础概念到测试方法,再到最佳实践,本文将帮助您深入了解API测试,确保您的API稳健、高效。 一、API测试的基础概念 API(应用程序编程接口)是不同软件应用程序之间的通信桥梁。A…

【算法】区间调度算法

目录 1.概述2.代码实现3.应用 1.概述 (1)区间调度算法 (Interval Scheduling Algorithm) 是一种在给定的一组任务中,选择尽可能多的相互不冲突的任务的算法。在这个问题中,每个任务都有一个开始时间和结束时间。两个任务是相互冲…

rosnode ping指令

节点是一个可执行文件,它可以通过ROS来与其他节点进行通信(这些节点可以分布在不同设备上面的软件直接,例如一台在Windows上面,一台在Ubuntu,一台在stm32上面) 节点是ROS中非常重要的一个概念,为了帮助初学者理解这个…

springboot中动态api如何设置

1.不需要编写controller 等mvc层,通过接口动态生成api。 这个问题,其实很好解决,以前编写接口,是要写controller,需要有 RestController RequestMapping("/test1") public class xxxController{ ApiOperat…

敏捷DevOps专家王立杰:端到端DevOps持续交付的5P法则 | IDCF

今天有一个流行的英文缩写词用来刻画这个风云变幻的时代:VUCA(乌卡时代)。四个英文字母分别表示动荡性(Volatility)、不确定性(Uncertainty)、复杂性(Complexity)和模糊性…