? 相关文章
- ?本章节内容演示源码下载,点击跳转?
?前言
- ? CAPL脚本中插入cmd指令和调用第三方程序
- ?演示软硬件环境 Win10 x64 ; CANoe 11 SP2 x64
目录
- ? 相关文章
- ?前言
- ? sysExecCmd 调用cmd指令
-
- ? 参数char cmd[]
- ? 参数char params[]
- ? 参数char directory[]
- ? 自动关闭cmd控制台
- ? sysExecCmd 调用可执行程序
-
- ? 调用bat 文件
- ? 调用python 文件 (带参数)
- ? 调用其它`exe`程序
- ? sysExec
- ?总结
? sysExecCmd 调用cmd指令
- ?如下图help文档给出的解释,调用cmd 给了4中类型,接下来我们逐个解读下
? 参数char cmd[]
- 1?? 先不管 参数
char params[]
, 和char directory[]
,先看参数char cmd[],
- 下面代码,直接什么都不写,直接调用
sysExecCmd
On key 'a'
{
sysExecCmd("", "" );
}
- 2?? 输出结果可以看出,直接打开了
cmd 控制台
,而且根目录是当前打开的cfg
所在的根目录
- 3?? 我们用
cd
指令进入到指定的路径下。
on key 'b'
{
char cmd[255];char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";snprintf(cmd,elCount(cmd),"cd %s",basePath);sysExecCmd(cmd, "" );
}
- 4?? 输出结果可以看出,正确执行了我们的
cd
指令
? 参数char params[]
- 1?? 了解了
char cmd[],
我们再看参数char params[]
,因为有些cmd指令是有参数的,这里我们可以在第二个参数中写如cmd的参数
on key 'c'
{
sysExecCmd("dir", "" );
}
on key 'd'
{
sysExecCmd("dir", "/w" );
}
- 2?? 输出结果可以看出 ,参数设置生效了。
- 3?? 参数直接在cmd参数里面写入效果也是一样的。
on key 'e'
{
sysExecCmd("dir /w", "" );
}
? 参数char directory[]
- 1?? 了解了
char cmd[],
参数char params[]
,我们再看下参数char directory[]
- 没这个参数,cmd 默认进入打开的cfg文件所在的目录,有这个参数,cmd将进入 指定的路径下
on key 'g'
{
char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";sysExecCmd("dir /w", "",basePath );
}
- 2?? 输出结果可以看出 ,参数设置生效了。
? 自动关闭cmd控制台
- 1?? 上面调用cmd 控制台后,如果你不关闭,他是不会关闭,最好就是执行完功能后给它自动关闭掉
- 比如,我们在写脚本中,可能想临时创建个文件或者有时候要把某个文件的只读属性给去除,这个时候才CAPL脚本中插入一行
sysExecCmd
就很方便 - & exit 可以运行完指令后再退出
on key 'h'
{
char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";sysExecCmd("echo hello > a.txt & exit", "",basePath );
}
- 2?? 运行完毕后,你会发现cmd一闪而过,而指令也已经完成了
? sysExecCmd 调用可执行程序
? 调用bat 文件
- 1?? 上面我们用
cmd
的复合指令完成了创建a.txt
文件,毕竟cmd指令无法完成更加复杂的指令,我们可以在bat
文件中,完善代码,然后再取调用它
- 2??
CAPL
脚本如下,运行下可以得到b.txt
文件被创建了:
on key 'j'
{
char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";sysExecCmd("callBat.bat", "",basePath );
}
? 调用python 文件 (带参数)
- 1?? 下面我们调用下python脚本,并传递三个参数
on key 'k'
{
char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";sysExecCmd("python callPython.py", "100 200 300", basePath);
}
-
2?? 执行结果如下:
? 调用其它exe
程序
- 1?? 下面脚本可以让我们直接打开计算器
on key 'l'
{
sysExecCmd("calc & exit", "");
}
? sysExec
- 1?? 这个格式cmd参数传递的必须是个可执行程序,不是能dos 指令
- 可以执行下,下面两种方式的差别:
sysExecCmd 会打开cmd 控制台
sysExec 不会打开控制台 或者打开控制台自动关闭
on key 'l'
{
sysExecCmd("calc & exit", "");
}on key 'z'
{
sysExec("calc", "");
}
- 2?? 下面我们通过调用下
callBat2.bat
脚本,来看下sysExec
究竟和sysExecmd
还有什么区别
on key 'v'
{
long retVal;char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";retVal = sysExec("callBat2.bat", "",basePath );write("retVal:%d",retVal);
}
- 返回值居然是0;用
sysExecmd
可以正常执行的用sysExec
却不行了?
- 3?? cmd 参数必须是绝对路径,相对路劲都不行
on key 'n'
{
long retVal;char basePath[1024] = "D:\\CANoe-Demo\\TestModule\\callCMD";retVal = sysExec("D:\\CANoe-Demo\\TestModule\\callCMD\\callBat2.bat", "",basePath );write("retVal:%d",retVal);
}
- 运行结果如下图,在
D:\\CANoe-Demo\\TestModule\\callCMD
路径下创建了c.txt
,如果改成retVal = sysExec("D:\\CANoe-Demo\\TestModule\\callCMD\\callBat2.bat", "" );
创建文件的路径还相同吗?有兴趣的可以自己试试。
- 4?? 奇怪是真的奇怪,如果没有
char directory[])
,那么又可以用相对路径了 - 下面代码,执行成功了,并在
D:\\CANoe-Demo
路径也就是cfg
所在目录下创建了c.txt
on key 'm'
{
long retVal;retVal = sysExec(".\\TestModule\\callCMD\\callBat2.bat", "" );write("retVal:%d",retVal);
}
?总结
?? 经过上面的尝试,如果想在capl中调用exe 或者执行dos 指令 ,博主建议使用sysExecCmd
格式
?? 也可通过关注下方的公众号免费领取上面的源码
,CANoe软件
,ISO标准
,学习资料
等海量资源?
- ?要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- ? 有手机的小伙伴可以加下交流群,在车载诊断领域的一个小小圈子,群里有
网盘资料
,源码
,可能有你需要的呢,平时可以交流技术,聊聊工作机会啥的。
- ?如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。