QProcess 没有启动

Posted

技术标签:

【中文标题】QProcess 没有启动【英文标题】:QProcess does not start 【发布时间】:2018-03-09 09:35:11 【问题描述】:

由于某种原因,我无法在 Ubuntu 上使用 QProcess 启动进程,我不明白为什么...

int main(int argc, char *argv[])

    //Run the process:
    QString procName = "./path/to/executable/Individual";
    QProcess *proc = new QProcess();

    proc->start(procName);
    if(!proc->waitForStarted())
    
        std::cout<<"Fail!"<<std::endl;
        getchar();
        return 0;
    

    int exitCode = proc->exitCode();

    std::cout<<"Exit code: "<<exitCode<<std::endl;
    getchar();
    return 0;


这总是将“失败”打印到终端。

如果我在终端中输入./path/to/executable/Individual,它工作得很好,所以路径似乎是正确的。

谁能告诉我为什么程序无法启动?

我在 Ubuntu 上使用 Qt 版本 5.9.1。

【问题讨论】:

问题出在应用程序的当前工作目录中。当您使用相对路径时,它无法找到您的可执行文件。尝试改用完整路径或从正确的位置启动应用程序。 您应该使用QFileInfo::exists() 确保您的程序可以访问Individual @vahancho:不,路径是绝对的(以 /home/[用户名]/ 开头) @Antwane:刚试了一下,qFileInfo说文件存在。 当然,以点开头的路径不是绝对的,而是相对的 【参考方案1】:

由于您使用的是 Linux,因此您可以

sudo ln -s /path/to/executable/Individual /usr/local/bin/individual

然后试试:

proc->start("individual");

【讨论】:

然后在控制台输入individual 启动程序? 哎呀,大写问题...是的,它似乎现在开始甚至结束,虽然退出代码给出了 255 我期望 -1,这可能是一个签名/未签名的问题吗?跨度> 另外,为什么它以这种方式工作,而不是从绝对路径? 是的,我在文件名前使用了点,正如我从 QProcess 文档中理解的那样,显然我不应该这样做。你的回答让我看到了。是的,我发现返回码 255 是有符号/无符号问题。谢谢!【参考方案2】:

你可以试试:

proc->start("cd /usr/local/bin/ && individual");

【讨论】:

以上是关于QProcess 没有启动的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QProcess 启动 Shell 脚本?

如何使用子进程或 QProcess 启动独立的 gnuplot 进程?

QProcess:使用输入功能启动 MATLAB 终端会话

从 QProcess 执行 /bin/login

QProcess 无法启动进程:未找到进程

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