QProcess调用外部的exe,判断外部程序是否在运行

依赖:windows下,Qtcreator;linux未测试

通过网络搜索,有两个地方需要注意;要想成功调用外部的exe,第一需要QProcess,第二需要QProcess的参数,这个参数是task 任务指令

艺术源于网络和Qt官网

1、tasklist和taskkill
  • TASKLIST,显示符合条件的列表信息
  • TASKKILL, 终止对应的程序
    在这里插入图片描述
    在这里插入图片描述
    举例:在这里插入图片描述
    上面的都是来自windows的cmd的指令信息。

eq;相同
ne;不相同
"-“与”"效果是一样的

2、QProcess
  • start
    启动外部程序;当他关闭时,外部程序也会跟着关闭。
    在这里插入图片描述
  • startDetached
    顾名思义,和外部分离开;关闭时,外部程序自行关闭
  • execute
    在这里插入图片描述
    关闭进程
  • close,关闭进程的所有通信并终止它

代码示例:

启动主要是 "command"//cmd指令
检查是否启动主要是  //process->readAllStandardOutput();

method 1: //非阻塞启动
process->startDetached("./SCMS-E.exe",QStringList()<<"command");//脱离
process->start("./test.exe",QStringList()<<"command");//依赖

method 2: //阻塞启动
process->execute("./test.exe",QStringList()<<"command");//不建议这种写法


//结束程序
process->close();
或者
process->execute("taskkill",QStringList()<<"-fi"<<"imagename eq test.exe");


//判断程序是否在运行
process->execute("tasklist", QStringList()<<"-fi"<<"imagename eq test.exe");
QString tmp= QString::fromLocal8Bit(process->readAllStandardOutput());
qDebug()<<"www"<<a;
if (!tmp.contains("test.exe",Qt::CaseInsensitive))
 {
   做你的事情}

补充:waitForFinished; 最开始调用是有效的。

如果进程完成,则返回 true; 否则返回 false (如果操作超时,如果发生错误,或者如果此 QProcess 已经完成)。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
可以使用QProcess的信号来判断外部py文件是否运行成功并结束。 当QProcess调用外部程序时,程序可能会立即返回,此时可以使用`QProcess::started()`信号来判断是否成功启动了外部程序。当外部程序执行完成后,可能会产生一些输出信息,可以使用`QProcess::readyReadStandardOutput()`信号来读取输出信息。当外部程序退出时,可以使用`QProcess::finished()`信号来判断程序是否正常结束。 下面是一个示例代码: ```c++ QProcess *process = new QProcess(this); connect(process, SIGNAL(started()), this, SLOT(onProcessStarted())); connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(onProcessOutput())); connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(onProcessFinished(int, QProcess::ExitStatus))); QString program = "python"; QStringList arguments; arguments << "test.py"; process->start(program, arguments); ``` 在`onProcessStarted()`槽函数中,可以设置一个标志来表示程序已经开始运行了,示例如下: ```c++ void onProcessStarted() { m_isRunning = true; } ``` 在`onProcessOutput()`槽函数中,可以读取外部程序的输出信息,示例如下: ```c++ void onProcessOutput() { QByteArray data = process->readAllStandardOutput(); qDebug() << data; } ``` 在`onProcessFinished()`槽函数中,可以判断程序是否正常结束,示例如下: ```c++ void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus) { m_isRunning = false; if (exitStatus == QProcess::NormalExit && exitCode == 0) { qDebug() << "Process finished successfully"; } else { qDebug() << "Process finished with errors"; } } ``` 在上述代码中,`m_isRunning`表示程序是否正在运行,初始值为false。当程序开始运行时,`onProcessStarted()`槽函数会被调用,将`m_isRunning`设置为true。当程序输出信息时,`onProcessOutput()`槽函数会被调用,可以在此函数中读取输出信息。当程序结束时,`onProcessFinished()`槽函数会被调用,将`m_isRunning`设置为false,并判断程序是否正常结束。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值