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

最新文章

  1. 生活中的OO智慧——大话面向对象五大原则
  2. 高性能 Socket 组件 HP-Socket v3.2.1 正式发布
  3. Windows环境下 PHP+Apache+Mysql配置
  4. TYVJ P1080 N皇后 Label:dfs PS:以前做的一道题,贴出来防忘
  5. [处理器、单片机]ARM
  6. python多进程中的队列数据共享问题
  7. 可学习的多人人脸识别程序(基于Emgu CV)
  8. Android JSON 解析库的使用 - Gson 和 fast-json
  9. drop table xx purge
  10. JAVA实现实用的ZIP压缩与解压
  11. Bestcoder HDU5059 Help him 字符串处理
  12. JavaScript之面向对象学习四原型对象的动态性
  13. CSS3效果收集
  14. 3DTouch--2
  15. 【Java编程】Java学习笔记&lt;二&gt;
  16. hdu 4417 Super Mario (主席树)
  17. Java通过sftp上传文件
  18. Screen2EXE录屏|录制视频
  19. 7.10 Models -- Handling Metadata(处理元数据)
  20. 重写UICollectionViewFlowLayout报cache mismatched frame警告

热门文章

  1. iOS-关于创建真机调试证书(发布证书,测试证书,推送调试证书)【转】
  2. iOS底层框架浅析
  3. mysql的HA及openstack和k8s区别
  4. Elasticsearch 全文搜索
  5. hashCode和identifyHashCode的区别
  6. hugepage设置
  7. Python-08-内置函数
  8. PAT(B) 1093 字符串A+B(Java和C)
  9. PAT(B) 1033 旧键盘打字(C) 字符
  10. Istio旨在成为容器化微服务的网格管道