命令行参数运行程序

引言

在实际的项目,我们的代码是需要交给测试人员测试的,在测试人员没有源码的情况下(一方面是源码需要更多的运行环境及配置,另一方面,源码具有个人劳动成果的因素)。就需要将代码内容打包,让测试人员直接运行。

方法

以下面代码为例,通过命令行的形式,运行程序:

#include <iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#ifdef _DEBUG
#pragma comment(lib,"opencv_world340d.lib")
#else
#pragma comment(lib,"opencv_world340.lib")
#endif
using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    cout << "---------------说明-----------------" << endl;
    cout << "输入参数都以char数组存在argv[i]" << endl;
    cout << "输入参数argv[0]是exe的路径" << endl; 
    cout << "----------------全部参数----------------" << endl;
    cout << "输入参数总数是:" << argc << endl;

    for (int i = 0; i < argc; i++)//输出所以命令行的参数(第一个默认是exe全路径)
    {
        cout << "第" << i+1 << "个参数是:" << argv[i] << endl;
    }
    Mat img = imread(argv[1]);//读取命令行的第二个参数,作为图像路径

    namedWindow("原画");

    imshow("原画", img);

    waitKey(0);
}
1.如果直接运行,则报错:
运行错误

原因分析:
在读取图像一行中

Mat img = imread(argv[1]);//读取命令行的第二个参数作为图像的路径

而我们直接运行时,命令行代码:argv[1]中是空的,没有内容(默认只有argv[0]中有内容,是程序执行代码的exe全路径,在debug或者release目录下,如果运行文件被移动到其他地方,也就是新位置的全路径)
在运行的结果也可以看出:

argc中只有一项,所以argv[1]中没有内容
2.通过命令行运行

运行方法:在exe文件夹 shift+鼠标右键 从命令行进入当前文件夹
显示如图(我的是mac上的Parallels版本的win10):

运行窗口
3.输入exe的名称(由于就在该目录下运行,所以默认可以不输入全路径)

直接输入报错:

报错,没有找到exe

按照提示,修改为.\OpenCV.exe才可以

正常运行
运行显示图像和图像名称
4.更多参数的情况
多个参数情况下,运行结果
5.这个运行过程由于1.bmp和exe在同一级目录下,所以不用加全路径
结论

通过这个简单案例,可以实现,命令行运行程序的目的。至此,我们只需要将exe和所需要的资源(如1.bmp)发送给测试人员,测试人员就可以完成代码测试,也可以被其他程序直接调用,而不用担心源码泄露和环境布置问题。
注意:
(1)本程序结尾加了watkey(0),所以只有关闭显示的“原图”窗口程序才可以结束运行。
(2)不论第一个参数是否输入exe的全路径,系统都会得到exe的全路径(当然前提是运行正确的情况下)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rexinx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值