java commandline类_CommandLineParse类(命令行解析类)

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

CommandLineParser类:命令行解析

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

1. C++ 例子:

e05336564a54ba79f0e670ffa8a596a8d2b.jpg

8cfcd01b99c8691816fb7964916ac395817.jpg

#include "opencv2/video/tracking.hpp"#include"opencv2/imgproc/imgproc.hpp"#include"opencv2/highgui/highgui.hpp"#include#include#include

using namespacecv;using namespacestd;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("c");//括号里写成“camera”也可以

string file = parser.get("fn");string third = parser.get("t");//打印输出

cout<

cout<

cout<

cout<

parser.printParams();//CommandLineParser的成员函数,打印全部参数,还有其他成员函数,如:has(),getString()等

return 0;

}

View Code

运行结果:

d34a719a10b476389c77e305bdb48007.png

大概可以看出来用这个类的好处就是很方便,因为以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,一不小心就输错了,很不方便。另外如果想要更改输入格式的话在主函数文件中要相应更改很多地方。现在有了这个类,只需要改keys里面的内容就可以了,并且可以直接运行,不需要cmd命令行带参运行。最后这个类封装了很多函数,可以直接用,只不过这个本来就是类结构的优点。

————————————————

版权声明:本文为CSDN博主「JKhere」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/jkhere/article/details/8674019

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

f28249bed338d05921f24302f5b91d0e712.jpg

6005d9a0e4c77a1668b85f6dedfe7b15c7a.jpg

#include "opencv2/imgcodecs.hpp"#include"opencv2/highgui.hpp"#include"opencv2/imgproc.hpp"#include

using namespacecv;using namespacestd;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("input"), IMREAD_COLOR);if(src.empty())

{

cout<< "Could not open or find the image!\n" <

}

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(0);return 0;

}

View Code

1.这个类的作用

以前没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,一不小心就输错了,很不方便。

现在有了这个类,只需要改keys里面的内容就可以了,并且运行时可以直接在vs下用F5,不需要cmd命令行带参运行。

2.keys

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

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

a577ea3464d44582db992f459c7266defe3.jpg

3217a10fcd52a163494f21b5211bc1cb527.jpg

public void parseArgs(String[] args) throwsParseException {//Create a Parser

CommandLineParser parser = newBasicParser( );

Options options= newOptions( );

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 voidprintHelpMessage() {

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);

}

View Code

在上述代码中

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"就是短选项和长选项.

如定义:

362481bdb79cc5b326a6b63cec75cc3c597.jpg

93483347e44784b55887ae65c5a47f868ca.jpg

String[] arg = {"-t","-c","hello"};//这里参数c在下面定义为需要额外参数,这里是"hello"

public void testOption(String[] args) throwsParseException{

Options options= newOptions();

options.addOption("t",false,"display current time");

options.addOption("c",true,"country code");

CommandLineParser parser= newDefaultParser();

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(newDate()));

}}

View Code

————————————————

版权声明:本文为CSDN博主「静心安心」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ylf_2278880589/article/details/80811304

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值