Linux下的QT的QProcess执行shell脚本文件(**)

Linux下的QT的QProcess执行shell脚本文件

QT开发中所遇到的问题(2)

有时执行子程序,发现找到不路径下的文件:setWorkingDirectory 设置子程序的工作目录

QProcess 类

================================

Linux下的QT的QProcess执行shell脚本文件

一、函数接口

QProcess类提供了三个函数

1、QProcess::execute() 以堵塞方式的执行shell命令,当命令执行完成后,调用进程才会继续执行。命令输出的任何数据都将转发给调用进程输出(因此无法捕获)。
2、QProcess::start() 以异步方式的执行shell命令,命令输出的数据存储于缓冲区,可以通过readAllStandardOutput()捕获
3、QProcess::startDetached() 以分离的方式执行shell命令,调用进程退出,则分离的进程将继续运行,而不受影响。

    QProcess::startDetached(); // 以分离进程的方式启动 没有子父进程关系(static函数)
    QProcess::start(); // 父死 子亡

startDetached() 启动脚本程序

QProcess::startDetached("/bin/bash",QStringList()<<"./filename.sh","/home/XXX/path");
// 或者
QProcess::startDetached("/bin/sh",QStringList()<<"./filename.sh","/home/XXX/path");

注意,我们要了解shell脚本是一种脚本语言,他不需要编译,而是直接运行解释器,将脚本作为解释器程序的参数运行的。
所以得看你的环境已有的是什么脚本解释器。
可用以下命令查看

    cat /etc/shells

start() 启动脚本程序

    QProcess *backupProcess = new QProcess;
    backupProcess->setWorkingDirectory(path);
    backupProcess->start("/bin/sh",QStringList()<<fileName);

或者直接封装成函数好了

void backupthread::executeLinuxCmd(QString path, QString fileName)
{
    QProcess *backupProcess = new QProcess;
    backupProcess->setWorkingDirectory(path);
    backupProcess->start("/bin/sh",QStringList()<<fileName);
    bool isfinished = backupProcess->waitForFinished();

    if(isfinished){
        backupProcess->close();
        delete backupProcess;
        backupProcess = NULL;
    }
}

参考:Qt开发 — QProcess执行带管道的shell命令

https://blog.csdn.net/HeroGuo_JP/article/details/110133959
————————————————
版权声明:本文为CSDN博主「立冲君也」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZHLCHLC/article/details/123519040

QT开发中所遇到的问题(2)

3、 QT执行shell脚本或者执行linux指令

QString Common::executeLinuxCmd(QString strCmd)
{
    QProcess p;
    p.start("bash", QStringList() <<"-c" << strCmd);
    p.waitForFinished();
    QString strResult = p.readAllStandardOutput();
    return strResult;
}
//实例
QString strResult1 = executeLinuxCmd("sudo sh /home/test.sh");
 
QString strResult2 = executeLinuxCmd("cat /etc/hostname");


————————————————
版权声明:本文为CSDN博主「菜鸟小码农的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40282557/article/details/110850484

Qt开发之路33---启动外部进程QProcess

三:设置子进程的工作路径setWorkingDirectory

    QString appRootPath = qApp->applicationDirPath();

    QProcess *process = new QProcess();
    process->setWorkingDirectory(appRootPath + "/BG/");
    process->start(appRootPath + "/BG/TestApp.exe");

有时执行子程序,发现找到不路径下的文件:
方法1:把主程序和子程序放在同一个目录下
方法2:通过setWorkingDirectory设置子程序的工作目录
————————————————
版权声明:本文为CSDN博主「木木木.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43229139/article/details/119534562

QProcess 类

(1)start() 函数

如果在启动前已经用 setProgram() 和 setArguments() 指定了程序和参数,那么直接调用第三种 start() 函数即可启动;如果没有指定,那么调用第一种 start() 时需要将程序和参数传入参数列表中。

关于第二种 start(),这个要区别于第一种和第三种。它的作用是执行一个命令而不是启动一个程序,比如删除某某文件命令“del /s *.txt”,其中 /s 表示从子目录删除指定的文件。如果命令中包含了空格,需要用 \"\" 来包裹住,否则执行不通过。如下所示。为了避免踩各种坑,建议用 setProgram() 和 setArguments() 指定了程序和参数,然后调用第三种 start() 方式。

 
  1. QProcess process;

  2. process.start("dir \"My Documents\"");

关于 execute() 静态函数,它和 start() 唯一的区别就是:start() 是非阻塞式的,而 execute() 是阻塞式的,即启动后就一直等待程序结束,获得程序的退出代码为止。此时启动的程序的所有输出都转发到调用进程

原文链接:https://blog.csdn.net/yanchenyu365/article/details/120667970

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt执行shell脚本可以使用QProcess类。具体步骤如下: 1. 创建QProcess对象。 2. 设置要执行的命令和参数。 3. 启动进程。 4. 等待进程执行完毕。 5. 获取进程的输出和错误信息。 示例代码如下: ``` QProcess process; QStringList args; args << "-c" << "your_shell_script.sh"; process.start("/bin/bash", args); process.waitForFinished(); QString output = process.readAllStandardOutput(); QString error = process.readAllStandardError(); ``` 其中,"-c"表示将后面的字符串作为命令执行。"your_shell_script.sh"是要执行shell脚本文件名。"/bin/bash"是bash解释器的路径,可以根据实际情况修改。执行完毕后,可以通过process.readAllStandardOutput()和process.readAllStandardError()获取进程的输出和错误信息。 ### 回答2: Qt是一种跨平台的应用程序开发框架,可以用于开发GUI(图形用户界面)应用程序和非GUI应用程序。其中,Qt提供了QProcess类来执行外部程序和Shell脚本QProcess是一个用于执行外部程序的类,它提供了与操作系统交互的API。QProcess可以用于执行命令行工具、运行不同操作系统的应用程序,以及执行Shell脚本等。其中,执行Shell脚本最常用的方式是利用QProcess的start()函数,如下所示: ```cpp QProcess process; QStringList arguments; arguments << "script.sh"; // 脚本文件名 process.start("/bin/sh", arguments); // 执行Shell脚本 ``` 在这个例子中,我们创建了一个QProcess对象,然后将要执行脚本文件名加入到QStringList中,然后调用start()函数来执行脚本。start()函数的第一个参数是要执行的程序的路径,在Linux中,/bin/sh是默认的Shell程序,第二个参数是命令行参数列表,这里我们把要执行脚本文件名加入列表中。执行完成后,QProcess会发出finished()信号,我们可以通过connect()函数连接到这个信号,通过读取QProcess的标准输出和标准错误输出来获得Shell脚本的输出结果。 ```cpp QProcess process; QStringList arguments; arguments << "script.sh"; // 脚本文件名 process.start("/bin/sh", arguments); // 执行Shell脚本 if (!process.waitForFinished()) { qDebug() << "执行脚本失败:" << process.errorString(); } else { QString output(process.readAllStandardOutput()); // 标准输出 QString error(process.readAllStandardError()); // 标准错误输出 qDebug() << "执行脚本成功:" << output << error; } ``` 在这个例子中,我们添加了一个判断,如果执行过程中有错误,会输出错误信息。否则,我们通过readAllStandardOutput()和readAllStandardError()函数分别读取标准输出和标准错误输出,并把结果存入QString中。 需要注意的是,在执行Shell脚本时,需要保证Shell脚本的权限是可执行的,否则会执行失败。因此,需要先通过chmod命令赋予Shell脚本执行权限如: ``` chmod +x script.sh ``` 总的来说,Qt执行Shell脚本的过程比较简单。通过QProcess类的start()函数和waitForFinished()函数,我们可以很容易地执行Shell脚本,并获取脚本的输出结果。同时需要记得给Shell脚本加上可执行权限。 ### 回答3: Qt是一个跨平台的开发框架,可以使用C++编写应用程序,并在Windows、macOS、Linux等多个平台上运行。在Qt应用程序中,可以通过调用系统命令或执行Shell脚本来扩展应用程序的功能和操作系统的交互性。本文将介绍如何在Qt应用程序中执行Shell脚本Qt提供了QProcess类来执行外部程序和命令。可以通过QProcess的start()方法来启动一个外部进程或执行一个Shell命令或脚本。 例如,假设我们有一个名为test.shShell脚本,需要在Qt应用程序中执行。我们可以使用QProcess的start()方法来实现: ``` #include <QtGui> #include <QProcess> int main(int argc, char *argv[]) { QApplication app(argc, argv); QProcess process; process.start("/bin/sh", QStringList() << "/path/to/test.sh"); return app.exec(); } ``` 该例子中,变量process是QProcess类的一个实例,启动了一个/bin/sh进程,并向该进程传递了Shell脚本的路径和名称。Shell脚本的路径和名称作为QStringList类型的参数传递给start()方法。如果脚本需要传递某些参数,也可以将这些参数添加到QStringList中作为第二个参数传递给start()方法。 在上面的例子中,QProcess实例的start()方法返回后,test.sh脚本就已经在一个新的进程中执行了。可以通过QProcess的waitForFinished()方法来等待Shell脚本执行完成,或通过QProcess的finished()信号来处理Shell脚本执行完成后的事件。 需要注意的是,由于Shell脚本可能需要访问环境变量或当前工作目录等系统资源,因此在启动Shell脚本前,可能需要设置QProcess的相应属性,例如设置环境变量或设置当前工作目录等。同时,需要考虑到Shell脚本执行过程中可能出现的错误或异常情况,需要对QProcess的error()或errorOccurred()信号进行处理。 总之,在Qt应用程序中执行Shell脚本是一种非常常见和便捷的操作,可以帮助我们实现更加复杂的系统功能和任务。通过QProcess类和start()方法,可以很容易地实现Shell脚本执行操作,并对执行结果进行处理和控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值