工作路径下用CMD启动fluent(相对路径读写文件),QT中QProcess调用详解及实验
相关资料:
https://www.cnblogs.com/Roye/p/12705536.html 原作者出处
https://blog.csdn.net/qq_33485434/article/details/80509284 原作者出处
1、os获取文件路径
path, filename = os.path.split(os.path.abspath(__file__)) # 获取当前文件的路径
os.getcwd() # 获取当前工作目录
file_path = os.path.abspath(filename) # 获取文件路径
2、提取路径中的盘符信息
disk = os.path.abspath(file_path)[:2]
3、提取fluent路径
fluent_path = “C:\Program Files\ANSYS Inc\v201\fluent\ntbin\win64\fluent”
4、组合cmd命令行(跳转到文件盘符D,跳转到文件路径D:\works,带jou运行4核启动fluent)
'D: && cd D:\works && “C:\Program Files\ANSYS Inc\v201\fluent\ntbin\win64\fluent” 3d -t4 -i test.jou'
意义:在工作路径下启动fluent,读写文件(jou、cas、msh)时可采用相对路径
---------------------------------------华丽的分隔线---------------------------------------------
在QT程序中需要将某目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了2天仍然没找到原因,使用另外一种办法解决了。
创建压缩包的方法
在windows平台创建压缩包,可以直接使用rar.exe,该程序在安装winrar之后,在其安装目录下就可以找到。该程序是winrar对应的命令行版本,其语法例子如下:
rar.exe a -k -r -s -m1 test.rar direct1/ direct2/ test.txt
例子对应的目录结构如下:
上面的命令表示在当前目录下创建压缩包 test.rar ,将当前目录下的 direct1目录以及其所有子目录和文件、direct2目录以及其子目录和文件、当前目录下的文件test.txt 都添加到test.rar压缩包中。
其中参数a表示添加到压缩包
参数-r表示递归添加
命令的问题解决了之后,那么下面就是如何在QT中调用该命令,实际上在QT中调用该命令就出现了很多问题。
在QT中调用命令行
QT中调用外部命令一般使用QProcess类提供的成员函数,其使用的具体代码如下:
1 2 3 4 |
|
套用上面的代码得到如下:
|
可以生成test.rar但是,该压缩包中将路径E:/test_rar_course也压缩进去了,而我需要的是打开压缩包之后仅仅看到direct1,direct2,test.txt3个项目,那么是不是设置一下工作目录就可以了呢:
|
我不仅添加-w参数(该参数为rar.exe的命令行参数,用于指定工作目录)为rar.exe命令指定工作目录,同时利用p.setWorkingDirectory()为启动的进程指定工作目录,运行之后报错,说找不到文件,我猜可能还是工作目录的问题,但是不知道问题在哪里,查了很多资料都无济于事,最终还是放弃了这种尝试,改成了下面的尝试:
|
而test.bat的内容为如下:
1 2 |
|
我直接在bat中通过cd命令切换工作目录,然后进行压缩,其中为了避免出现压缩绝对路径的情况,direct1,direct2,test.txt使用的都是相对路径,直接鼠标双击该test.bat运行OK,放在QT中运行OK,似乎完美的解决了问题。
但是我发现,如果目录中出现()括号字符就不行了,当有括号字符的时候在QProcess执行的报错中显示路径被括号截断,此后我把路径用引号引起来没效果:
"\"E:/test_rar_course(xx)/test.bat\""
根据网上搜索到的信息,用^符号对括号进行转义没有截断的报错了,但是命令执行还是没有效果,控制台也没有报错:
"E:/test_rar_course^(xx^)/test.bat"
到这里我不知道该怎么样去达到我的效果,唯一的感觉QProcess怎么这么难用,如果有知道的QT大神,烦请告诉一下。我想到用另外一种方式来实现,就是用C++写一个dll实现,然后QT中调用。
在QT中调用C++创建的dll
主要代码如下,实际上就是调用system函数,但是如果路径中有圆括号,还是需要用^符号进行转义,否则system执行也有问题:
|
但是除了圆括号要转义以外,还存在一个很不舒服的问题,就是每次执行都会弹出cmd的黑窗口,执行完成之后,窗口消失,代码改成下面的就好了:
到此完美解决该问题,既不需要对圆括号进行转义,同时也隐藏了黑窗口了。当然前述的test.bat的内容要在程序中动态生成,利用合适的路径替换掉test.bat中的路径。 |
最后调用如:SystemTool::GenerateIndexRar("E:/test_rar_course(xx)/test.bat");
相关文章
- Qt小软件:LanFileSender(局域网文件传输小工具)
- 一文详解共享内存-附带QT共享内存Demo实现
- qt运行cmd命令_cmd ping大包命令
- Qt截图软件3-实现矩形区域截图
- C/C++ Qt 基本文件读写方法
- Qt定时器小坑
- Qt项目管理文件(.pro)及其作用详解
- Qt MDI及其使用方法(详解版)
- 使用Qt在Linux下执行命令(qt执行linux命令)
- 开发Linux程序,利用Qt软件实现虚拟键盘(linuxqt软键盘)
- Linux Qt开发之旅 让软件实现自由自在(linuxqtso)
- Qt 5.9.4 正式发布:包含近 200 项 Bug 修复
- Linux下高效安装Qt(linux下安装qt)
- 利用Linux系统和QT技术实现高效嵌入式应用程序开发(linux嵌入式qt)
- Qt在Linux环境中的新技术应用(qt与linux程序设计)
- Qt跨平台编译MySQL驱动实践(qt编译mysql驱动)
- 连接在 Qt 中使用 Redis 连接(qtredis)
- 提高数据处理效率:探究Qt与MySQL数据库的结合应用(qt与mysql数据库)
- 轻松实现QT直连Microsoft SQL Server(qt直连mssql)
- Qt如何编译Oracle数据库驱动(qt编译oracle驱动)
- 在Qt中编译Oracle环境(qt编译 oracle)
- Linux下安装Qt操作指南(linux下怎么安装qt)
- MySQL和QT不配套使用,无法实现事务处理(mysql不支持qt事务)
- Redis与Qt实现完美连接(redis连接qt)