Java命令行界面(第8部分):Argparse4j

Argparse4j是“ Java命令行参数解析器库”,其主页描述为“基于Python的argparse模块的Java命令行参数解析器库”。 在本文中,我将简要介绍如何使用Argparse4j 0.7.0处理命令行参数,该参数与本系列中的前七篇有关Java命令行处理的文章中所解析的相似。

可以通过ArgumentParser接口及其addArgument(String ...)方法完成使用Argparse4j进行命令行处理的参数“定义”阶段 。 addArgument(String...)方法的返回类型是Argument接口的实例。 该接口的实现(通常是ArgumentImpl )提供了用于设置每个参数的特征的方法。 因为这些方法中的每一个都返回一个Argument实例,所以这些调用可以以非常流畅的方式链接在一起。 下一个屏幕快照对此进行了演示。

Argparse4j的“定义”阶段

final ArgumentParser argumentParser =ArgumentParsers.newArgumentParser("Main", true);
argumentParser.addArgument("-f", "--file").dest("file").required(true).help("Path and name of file");
argumentParser.addArgument("-v", "--verbose").dest("verbose").type(Boolean.class).nargs("?").setConst(true).help("Enable verbose output.");

在上面的代码清单中,使用静态初始化方法实例化了ArgumentParser实例,该实例需要一个String参数来表示使用或帮助输出中将包含的脚本或程序名称 。 ArgumentParsers的newArgumentParse(String,boolean)方法的第二个参数指定将自动支持“帮助”选项 -h--help

上面的代码清单中定义的第一个参数允许在命令行上指定文件路径和名称。 字符串“ -f”和“ -file”被传递到addArgument(String...)方法,这意味着-f--file可以在命令行上用于指定文件路径和名称。 在作为第一个参数的说明的一部分而创建的Argument实例上,调用了另外三个方法[ dest(String) , required(boolean)和help(String) ]。 这三个方法分别指定一个名称,可以在代码中引用该参数,该参数必须出现在命令行中,以及在请求该参数的帮助时要显示的字符串。

上面的代码清单中定义的第二个参数将字符串“ -v”和“ -verbose”传递给addArgument(String...)方法,以允许该参数在命令行上使用短选项或长选项名表示。 。 像第一个参数一样,该名称的名称将由dest(String)方法设置的代码中引用,并使用help(String)方法为“ help”输出指定其字符串。 第二个参数不是必需的,因此这里required(boolean)方法。

第二个参数的定义在Argument上有一些其他方法称为。 我使用type(Class <T>)演示了显式指定参数所需的Java数据类型的功能。 我还需要指定nargs(String)和setConst(Object)方法的组合,以指定verbosity参数不需要该标志提供的值。 这使我可以在期望明确说明的那些选项之后指定-v--verbose ,而没有“ true”或“ false”。

argparse4j通过调用ArgumentParser的parseArgs(String [])方法来支持命令行处理的“解析”阶段。 下一个代码清单演示了这一点。

使用Argparse4j“解析”命令行参数

final Namespace response = argumentParser.parseArgs(arguments);

解析仅需要一个语句,并返回Namespace的实例。

使用Argparse4j进行命令行处理的“询问”阶段涉及从Namespace实例包装的Map中访问已解析的命令行参数。 该映射的键是使用dest(String)方法指定的字符串,并且映射的值是与那些参数名称关联的值。 在下一个代码清单中将演示如何查询这些值。

用Argparse4j“询问”命令行参数

final String filePathAndName = response.getString("file");
final Boolean verbositySet = response.getBoolean("verbose");out.println("Path/name of file is '" + filePathAndName+ "' and verbosity is "+ (Boolean.TRUE.equals(verbositySet) ? "SET" : "NOT SET")+ ".");

在刚刚列出的代码中,使用了“文件”和“详细”键,因为在定义预期参数时, dest(String)方法提供了相同的字符串。

可以从GitHub上看到提取上述代码段的完整源代码。

下一个屏幕快照演示了不带任何参数的简单Java应用程序的运行以及显示的有关缺少的必需“文件”参数的消息。

上面的屏幕快照中显示的所有大写“ FILE”来自在定义预期参数时在dest(String)方法中指定的dest(String) 。 换句话说,该dest(String)规范既设置了用于在内部键入参数映射的字符串,又设置了显示在帮助/用法中的目标字符串。

下一个屏幕快照展示了“文件”和“详细”选项的典型用法的几种变体。

最终的屏幕快照演示了为-h--help选项提供的帮助信息,因为ArgumentParser的原始实例是使用“ addHelp”参数设置为true

在选择框架或库来帮助Java进行命令行分析时,需要考虑Argparse4j的一些其他特征。

  • Argparse4j是开放源代码,并已获得MIT许可证 。
  • argparse4j-0.7.0.jar (2015年12月)的大小约为89 KB,并且没有其他第三方库依赖项。
  • Argparse4j不使用注释。
  • 联机文档包含Clojure示例 。
  • 我怀疑使用Python(特别是如果使用argparse )编写脚本的Java开发人员在需要解析命令行参数的Java应用程序中使用argparse4j时会获得好处。
    • (我发现在Java中处理命令行参数时, Apache Commons CLI很直观,因为与Java中相比,我在Groovy中解析命令行参数的频率更高,并且Groovy提供了内置的Apache Commons CLI支持)
  • Argparse4j启发了 Scala的argparse4s 的开发 。

Argparse4j只是许多基于Java的命令行处理库之一。 argparse4j的独特之处在于它的argparse传统,这使它与众多其他选择大相径庭。 鉴于此,我相信最可能选择Argparse4j来满足其Java命令行处理需求的Java开发人员将是那些经常使用argparse在基于Python的脚本和工具中解析命令行参数的开发人员,或者更喜欢Python和argparse的命令解析语义的那些开发人员。 。

其他参考

  • Argparse4j
  • Argparse4j用户手册
  • Argparse4j示例
  • Argparse4j API文档 (Javadoc)
  • Argparse4j源于GitHub
  • Argparse4j版本 (下载)
  • Argparse4j 0.7.0 (Maven)

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-8-argparse4j.html

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

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

相关文章

MvvmLight框架使用入门(三)

MvvmLight框架使用入门&#xff08;三&#xff09; 本篇是MvvmLight框架使用入门的第三篇。从本篇开始&#xff0c;所有代码将通过Windows 10的Universal App来演示。我们将创建一个Universal App并应用MvvmLight框架。 首先通过VS2015创建一个名为UniversalApp的空工程&#x…

Pytorch LSTM实例2

对Pytorch中LSTM实例稍作修改,这是一个词性标注的实例 #导入相应的包 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optimtorch.manual_seed(1)#准备数据的阶段 def prepare_sequence(seq, to_ix):idxs = [to_ix[w] for w in …

java更好的语言_Java,如果这是一个更好的世界

java更好的语言只是梦想着有一个更好的世界&#xff0c;在该世界中&#xff0c;Java平台中的一些旧错误已得到纠正&#xff0c;而某些令人敬畏的缺失功能也已实现。 不要误会我的意思。 我认为Java很棒。 但是它仍然存在一些问题&#xff0c;就像其他平台一样。 我没有任何特定…

anaconda安装成功测试_学习笔记120—Win10 成功安装Anaconda 【亲测有效,需注意几点!!!】...

Win10 下安装 Anaconda一、下载安装 Anaconda(勾选 PATH)&#xff1a;Anaconda 是专注于数据分析的 Python 发行版本&#xff0c;包含了 conda、Python 等 190 多个科学包及其依赖项。使用 Anaconda 的好处在于可以省去很多配置环境的步 骤&#xff0c;省时省心又便于分析。下载…

Pytorch 词嵌入word_embedding1初识

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)参数所表示的含义: num_embeddings (int) :嵌入字典的大小 embedding_dim (int) :每个嵌入向量的大小 padding_idx (int, optio…

Python语言 目录

待续.... 转载于:https://www.cnblogs.com/jiangchunsheng/p/11077884.html

JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

Java 9距离&#xff08;希望&#xff09;数月了&#xff0c;现在该讨论一下即将发生的变化以及您应该采取的措施 Java 9即将来临&#xff08;我们正在计算到达的日子 &#xff09;&#xff0c;其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来准备自己的…

Pytorch 词嵌入word_embedding2实例(加载已训练词向量)

目录 1、加载已训练好的词嵌入 2、是否需要重新训练词嵌入 3、不重新训练词嵌入时优化器设置

IPv4数据报格式及其语义

IPv4数据报格式及其语义 一、IP数据报的格式如下图所示 版本 首部长度 服务类型 数据报长度 16比特标识 标志 13比特片偏移 寿命 上层协议 首部检验和 32比特源IP地址 32比特目的IP地址 选项&#xff08;如果有的话&#xff09; 数据 IPv4数据报格式 二、各部分语…

华景机器人怎么控制_【华景QQ机器人怎么用】华景QQ机器人好不好_使用技巧-ZOL软件百科...

发布日期&#xff1a;2016年02月21日 Release 2 && Release 3新增功能和优化及修复修复严重崩溃问题。全面支持emoji表情。修复某些用户不能登录。轻量级重包处理。优化消息显示。修复一个数组越界错误。修复一个数组下标不能为0错误。加快消息处理速度。UI线程与消息处…

Java命令行界面(第9部分):parse-cmd

parse-cmd库由单个类ParseCmd.java组成&#xff0c;该类是“用于在Java应用程序中定义和解析命令行参数的Java类。” 该库托管在Google Code存档上 &#xff0c;因此可以随时关闭 。 该JAR似乎也可以在GitHub上使用 。 这篇文章介绍了如何使用parse-cmd 0.0.93处理Java中的命令…

Pytorch--Tensor, Numpy--Array,Python--List 相互之间的转换

1、 Python--List Numpy--Array list = [[1, 2, 4, 8], [0.1, 0.4, 0.9, 0.8]] list_np = np.array(list) print(list_np的维度:,list_np.shape) print(list_np的类型:,type(list_np))运行结果: 2、Python--List Pytorch--Tensor test = [[1, 2, 4, 8], [0.1, 0.4, 0…

Redis的各项功能解决了哪些问题?

Redis是什么 官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。 同时支持strings&#xff0c;lists&#xff0c;hashes&#xff0c;set…

join left semi_HIVE--left semi join

实验&#xff1a;hive> select * from b1;OK1 003 201705111 004 201705121 005 201705132 006 201705143 007 20170515Time taken: 0.041 secondshive> select * from b2;OK1 005 201705132 006 …

java permgen_Java 8:从PermGen到元空间

java permgen您可能已经知道&#xff0c;现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的某些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation&#xff08;PermGen&#xff09;空间。例如&#xff0c;自…

总结

写在前面 课程名称&#xff1a;软件工程原理及方法 课程链接&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3393 团队名称&#xff1a;求莫名堂 请…

Pytorch GRU(详解GRU+torch.nn.GRU()实现)

pytorch GRU 目录 pytorch GRU 一、GRU简介1 二、GRU简介2 三、pytorch GRU 3.1 定义GRU ()

同步装饰器来替换线程安全类

您知道什么是线程安全吗&#xff1f; 如果没有&#xff0c;下面是一个简单的示例。 所有类都必须是线程安全的&#xff0c;对吗&#xff1f; 并不是的。 其中一些必须是线程安全的&#xff1f; 又错了。 我认为它们都不必是线程安全的&#xff0c;而它们都必须提供同步的装饰器…

creo减速器建模实例_3.16减速器箱体附件建模

本节内容主要介绍了减速器箱体附件建模&#xff0c;视频时长24分32秒。本节主要通过阵列&#xff0c;拉伸&#xff0c;孔等命令完成创建&#xff0c;操作时注意孔的类型的选择&#xff0c;以及定位基准的选择&#xff0c;学习时要掌握其减速器附件的设计。简要操作步骤&#xf…

回文数

问题 A: 回文数 时间限制: 1 Sec 内存限制: 32 MB提交: 1705 解决: 512[提交][状态][讨论版]题目描述 我们把从左往右和从右往左念起来相同的数字叫做回文数。例如&#xff0c;75457就是一个回文数。当然某个数用某个进制表示不是回文数&#xff0c;但是用别的进制表示可能就…