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 无法执行简单的控制台程序的主要内容,如果未能解决你的问题,请参考以下文章