QProcess 无法执行简单的控制台程序

Posted

技术标签:

【中文标题】QProcess 无法执行简单的控制台程序【英文标题】:QProcess fails to execute a simple console program 【发布时间】:2014-02-13 10:43:15 【问题描述】:

我从我正在创建的 Qt 应用程序中编译了一个 c++ 源文件。现在我想运行生成的 exe 文件,并将其输入和输出重定向到 txt 文件。但是当我尝试从 QProcess 运行它时,它无法执行,退出代码为 -2。

这就是我使用 QProcess 编译文件的方式 -

arguments << fileName << "-o" << exeFileName << "-static";
connect(compileProcess, SIGNAL(finished(int)), this, SLOT(compiled()));
compileProcess->start(QString("g++"), arguments);

这就是我从 QProcess 在插槽中运行 exe 的方式compiled() -

runProcess->setStandardInputFile(inputFilename);
runProcess->setStandardOutputFile(QFileInfo(exeFileName).path() + "/output.txt");
int code = runProcess->execute(exeFileName); //code = -2

当我手动启动程序时,它运行良好。那么,为什么不能从 QProcess 启动呢? 我在 Windows 7 上使用 Qt 5.0.2

这是我正在编译的源文件-

#include <iostream>

int main() 
    std::string s;s
    std::cin >> s;
    std::cout << s;
    return 0;

【问题讨论】:

如果添加readAllStandardError 并打印内容,是否有任何信息? -2 通常是它无法以正确的权限打开可执行文件,或者找不到可执行文件,因此还要仔细检查 exeFileName 是否指向正确的位置。 readAllStandardError 不返回任何信息。我验证了exeFileName 指向正确的文件。 我能想到的唯一另一件事是 QProcess 设置为应用程序工作目录,而不是查看 exeFileName 路径。 有一个工作目录方法:qt-project.org/doc/qt-5.0/qtcore/… 基本上 QProcess 将其设置为您的应用程序正在运行的目录,但偶尔会导致问题。 好的,但是exeFileName有文件的绝对路径,即使这样QProcess也找不到文件? 【参考方案1】:

我终于让它工作了。 exe 文件路径中有空格,Qt 并没有在其周围隐式添加引号。明确添加引号就可以了。

runProcess->start("\"" + exeFileName + "\"");

【讨论】:

以上是关于QProcess 无法执行简单的控制台程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 QProcess 为 c++ 控制台应用程序实现前端

Qt:无法使用 QProcess 启动 Windows 控制台

在 Qt 控制台应用程序中读写 QProcess

MySQL之流程控制结构

带有 CreateNoWindow 的 QProcess

试图从生成的 QProcess 中读取标准输出