【问题标题】:QProcess Wrong BehaviorQProcess 错误行为
【发布时间】:2016-12-22 07:37:39
【问题描述】:

当我在 QTCreator 下运行我的应用程序时,我的应用程序运行不同的 bash 文件,一切正常,但是当我直接运行我的应用程序时,我无法读取 QProcess 输出。即使我通过终端运行我的应用程序,它也可以正常工作,那么问题出在哪里?
我正在使用QT 5.7 / OSX Platform
这是我的代码

        QProcess proc ;
    proc.start(QCoreApplication::applicationDirPath() + "/check.sh");
    proc.waitForFinished();
    QString output = QString(proc.readAll());
    qDebug() << output ;

【问题讨论】:

  • 你的意思是直接运行应用程序?运行应用程序时是否执行 check.sh?
  • 您希望流程输出出现在哪里?如果您通过双击 Finder 运行应用程序,您将不会在任何地方看到 stderr 或 stdout,即您不会在任何地方看到 qDebug() 输出。
  • 我知道我使用 Qmessagebox 来显示输出,但这里提供的代码是我的代码的一部分,只是为了显示我如何读取输出

标签: c++ qt qt5 qt-creator qt5.7


【解决方案1】:

您应该调查一些可能性

  • 当您单独运行脚本时,您能否确认脚本正在运行?
  • QProcess 在提供脚本时总是对创建进程有点不安,具体取决于平台。脚本中有shebang吗?它与您运行程序的外壳相匹配吗?您可能需要基于 shell 创建进程,提供脚本的文件名作为参数。
  • QProcess::readAll() 如果进程未刷新输出缓冲区,则可能不返回任何内容。最后输出 EOL 将强制刷新。

【讨论】:

  • 我不知道为什么,但是当我通过 qputenv 手动添加 bin 和 sbin 路径时它可以工作
  • 如果您不想更改自己的程序环境,也可以尝试QProcess::setProcessEnvironment()
  • @Koorosh Ghorbani 脚本写的是什么? #! 重击?或 #!/bin/bash ?除非环境中有该文件夹,否则前者将无法工作。此外,符号链接可能是一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2014-03-13
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多