https://blog.csdn.net/jkhere/article/details/8674019

https://sophia0130.github.io/2018/05/08/CommandLineParse%E7%B1%BB/

https://blog.csdn.net/ylf_2278880589/article/details/80811304

Java命令行选项解析之Commons-CLI & Args4J & JCommander

CommandLineParser类:命令行解析

这个类的出现主要是方便用户在命令行使用过程中减少工作量,可以在程序文件中直接指定命令行中的参数指令,方便了调试。

1. C++ 例子:

#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp" #include <iostream>
#include <ctype.h>
#include <string> using namespace cv;
using namespace std; const char* keys =
{
"{ c | camera | 0 | use camera or not}"
"{ fn | filename |xxxx.avi | movie file}"
"{ t | test | test string | good day!}"
}; int main(int argc, const char** argv )
{ CommandLineParser parser(argc, argv, keys); bool useCamera = parser.get<bool>("c");//括号里写成“camera”也可以
string file = parser.get<string>("fn");
string third = parser.get<string>("t"); //打印输出
cout<<useCamera<<endl;
cout<<file<<endl;
cout<<third<<endl;
cout<<endl;
parser.printParams();//CommandLineParser的成员函数,打印全部参数,还有其他成员函数,如:has(),getString()等
return ;
}

运行结果:

大概可以看出来用这个类的好处就是很方便,因为以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,一不小心就输错了,很不方便。另外如果想要更改输入格式的话在主函数文件中要相应更改很多地方。现在有了这个类,只需要改keys里面的内容就可以了,并且可以直接运行,不需要cmd命令行带参运行。最后这个类封装了很多函数,可以直接用,只不过这个本来就是类结构的优点。
————————————————
版权声明:本文为CSDN博主「JKhere」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jkhere/article/details/8674019

2.更简单的c++例子:

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream> using namespace cv;
using namespace std; const char* keys =
{
"{input |C:/Users/king/Pictures/Saved Pictures/1.jpg| string |input image}"
};
//分别表示简称,文件来源,文件值和帮助语句 int main(int argc, char** argv)
{
Mat src, dst; const char* source_window = "Source image";
const char* equalized_window = "Equalized Image"; // Load image
CommandLineParser parser(argc, argv, keys);
src = imread(parser.get<String>("input"), IMREAD_COLOR);
if (src.empty())
{
cout << "Could not open or find the image!\n" << endl;
return -;
} cvtColor(src, src, COLOR_BGR2GRAY);
equalizeHist(src, dst); namedWindow(source_window, WINDOW_AUTOSIZE);
namedWindow(equalized_window, WINDOW_AUTOSIZE); imshow(source_window, src);
imshow(equalized_window, dst); waitKey();
return ; }

1.这个类的作用

以前没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,一不小心就输错了,很不方便。
现在有了这个类,只需要改keys里面的内容就可以了,并且运行时可以直接在vs下用F5,不需要cmd命令行带参运行

2.keys

keys中间的内容分成4断,用”|”分隔开,分别表示简称,文件来源,文件值和帮助语句 PS:文件的值我不是很理解,如果类型是bool,那就有值0或,如果是类型是图像,它的值可以省略,我这边文件的值用了string,也运行成功了。

3. Java构建命令行启动模式CommandLineParser/Options

public void parseArgs(String[] args) throws ParseException {
// Create a Parser
CommandLineParser parser = new BasicParser( );
Options options = new Options( );
options.addOption("h", "help", false, "Print this usage information");
options.addOption("c", "cfg", true, "config Absolute Path");
options.addOption("l", "log", true, "log configuration"); // Parse the program arguments
CommandLine commandLine = parser.parse( options, args );
// Set the appropriate variables based on supplied options if( commandLine.hasOption('h') ) {
printHelpMessage();
System.exit(0);
}
if( commandLine.hasOption('c') ) {
cfg = new File(commandLine.getOptionValue('c'));
} else {
printHelpMessage();
System.exit(0);
}
if( commandLine.hasOption('l') ) {
log = new File(commandLine.getOptionValue('l'));
} else {
printHelpMessage();
System.exit(0);
}
}
public void printHelpMessage() {
System.out.println( "Change the xml File and Log.XML Path to the right Absolute Path base on your project Location in your computor");
System.out.println("Usage example: ");
System.out.println( "java -cfg D:\\MyProject\\face2face\\logic\\src\\main\\resources\\logic.xml -log D:\\MyProject\\face2face\\logic\\src\\main\\resources\\log.xml");
System.exit(0);
}

在上述代码中

options.addOption("c", "cfg", true, "config Absolute Path"); //第三个参数为true表示需要额外参数:
       linux 命令行约定:
 
 
   几乎所有的GNU/Linux程序都遵循一些命令行参数定义的约定。程序希望出现的参数可以分成两种:选项(options
or
flags)、其他类型的的参数。Options修饰了程序运行的方式,其他类型的参数则提供了输入(例如,输入文件的名称)。

对于options类型参数可以有两种方式:
 
 
   1)短选项(short
options):顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写或小写字母)。例如:-s,-h等。

2)长选项(long
options):长选项,包含了两个连字号和一些大小写字母组成的单词。例如,--size,--help等。

*注:一个程序通常会提供包括short
options和long options两种参数形式的参数。

  以上代码中的"c"和"cfg"就是短选项和长选项.

如定义:

String[] arg = {"-t","-c","hello"};//这里参数c在下面定义为需要额外参数,这里是"hello"
public void testOption(String[] args) throws ParseException{ Options options = new Options();
options.addOption("t",false,"display current time");
options.addOption("c",true,"country code");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse( options, args);
if(cmd.hasOption("t")) {
System.out.println((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date())+" in "+cmd.getOptionValue("c"));//这里调用cmd.getOptionValue("c")会输出hello
}else{
System.out.println((new SimpleDateFormat("yyyy-MM-dd")).format(new Date()));
}}

————————————————
版权声明:本文为CSDN博主「静心安心」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ylf_2278880589/article/details/80811304

CommandLineParse类(命令行解析类)的更多相关文章

  1. CommandLineParser命令行解析类

    目的:方便用户在命令行使用过程中减少工作量 以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,一不小心就输 ...

  2. python实现命令行解析的argparse的使用

    参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...

  3. python命令行解析模块--argparse

    python命令行解析模块--argparse 目录 简介 详解ArgumentParser方法 详解add_argument方法 参考文档: https://www.jianshu.com/p/aa ...

  4. .NET:命令行解析器介绍

    背景 经常需要开发一下小工具,之前都是自己解析命令行参数,接触过动态语言社区以后,发现命令行解析有特定的模式和框架可以利用,本文介绍一个 .NET 平台的类库. 示例 需求 拷贝文件,如:CopyFi ...

  5. 2019-9-2-C#命令行解析工具

    title author date CreateTime categories C#命令行解析工具 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 17:23: ...

  6. Python命令行解析argparse常用语法使用简介

    查看原文:http://www.sijitao.net/2000.html python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argp ...

  7. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  8. python命令行解析工具argparse模块【1】

    argpaser是python中很好用的一个命令行解析模块,使用它我们可以很方便的创建用户友好型命令行程序.而且argparse会自动生成帮助信息和错误信息. 一.示例 例如下面的例子,从命令行中获取 ...

  9. 使用命令行解析php文件

    使用命令行解析php文件,这样可以调用Log4PHP库中的一些demo,因为默认的输出使用命令行作为输出. 建一个bat文件: echo 以下是使用命令行解析php文件 C:\xampp\php\ph ...

随机推荐

  1. sriov-网络问题Debug记录

    我司容器云平台使用了sriov的底层网络模型,这个网络驱动的好处是配置少,转发效率高,但是缺点也很明显,出了问题比较难Debug. 现就工作中出现的问题记录如下: 容器删除后,或者docker进程异常 ...

  2. logstash 和filebeat 是什么关系

    因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder.不过作者只是一个人,加入http://el ...

  3. uinxSocket 与 tcpSocket

    $tpc = stream_socket_client('unix:///tmp/php-cgi.sock');nginx配置中可以用uninx:/tmp/php-.....这种格式,也可用直接uin ...

  4. pv回收

    学习cloudman中的k8s 152课,创建pod时,需要在k8s-host2 中挂着到在k8s-master 中/nfs中创建的挂载目录,结果提示没有/nfs/pv1 root@k8s-maste ...

  5. Suspended Animation——《The Economist》阅读积累(考研英语二·2010 Reading Text 1)

    [知识小百科] Damien Hirst(达米恩●赫斯特):生于1965年,是新一代英国艺术家的主要代表人物之一.他主导了90年代英国艺术发展并享有很高的国际声誉.赫斯特在1986年9月就读于伦敦大学 ...

  6. java23种设计模式之十:责任链模式

    最近在学习netty中发现其中用到了责任链模式,然后结合自己在写代码中遇到了大量写if...else的情况,决定学习一下责任链模式. 一.什么样的场景下会选择用责任链模式 我们在进行业务逻辑判断时,需 ...

  7. [转帖]深度分析HBase架构

    深度分析HBase架构 https://zhuanlan.zhihu.com/p/30414252   原文链接(https://mapr.com/blog/in-depth-look-hbase-a ...

  8. Javascript 闭包何时回收?

    定义 闭包是函数和声明该函数的词法环境的组合.闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量. 范例 fun ...

  9. SQL——INSERT INTO(增)

    一.INSERT INTO语句的基本用法 INSERT INTO 语句用于往表中插入新记录. student表: INSERT INTO语句有2种语法格式: 1.不指定列名,直接插入记录. 语法格式如 ...

  10. PAT甲级题分类汇编——计算

    本文为PAT甲级分类汇编系列文章. 计算类,指以数学运算为主或为背景的题. 题号 标题 分数 大意 1058 A+B in Hogwarts 20 特殊进制加法 1059 Prime Factors ...