【问题标题】:If setProcessEnvironment the QProcess will not run如果 setProcessEnvironment QProcess 将不会运行
【发布时间】:2014-03-15 23:46:15
【问题描述】:

我有一段运行外部脚本的简单代码(见下文)。代码运行良好。现在我想在运行脚本之前设置一个环境变量。当我这样做时,waitForStarted 方法失​​败,错误代码为 0 和 errorString "Exec format error"。

我已经简化了我的代码,并且可以通过调用 setProcessEnvironment 来重现错误。在下面的代码中,如果我注释掉第三行,它运行得很好。如果我取消注释第三行,我会收到上面提到的错误。有人可以解释为什么简单地将环境设置回原来的状态会导致此错误吗? (在 Linux 上运行以防万一,使用 Qt 5.1.0)。

QProcess command;
QProcessEnvironment oldenvironment = QProcessEnvironment::systemEnvironment();
// If I comment out next line it runs fine!
command.setProcessEnvironment(oldenvironment);

command.start(commandpath, parameters);
if (command.waitForStarted(START_WAIT_TIME)) {
   qDebug() << "Started ok";
} else {
    qDebug() << "*** start error code: " << command.error();
    qDebug() << "*** start error string: " << command.errorString();
}

同样,commandpath 设置为“/tmp/myscript.sh”,参数为空 QStringList

【问题讨论】:

  • Michelle,如果你使用在命令行上设置环境然后调用脚本,它是否有效?您可以使用任何其他程序重现它还是特定于您的脚本?
  • 我无法使用我尝试过的二进制文件重现此问题。你能分享一个重现问题的简单脚本吗?
  • 这可能取决于旧环境的内容(一些意外的内容导致语法错误),因此可能检查其中是否存在某个键/值对触发问题。

标签: c++ qt exec environment qprocess


【解决方案1】:

我在 Qt 中发现了一个似乎很有趣的错误。我正在启动的程序是一个 bash 脚本,我在文件顶部没有 #!/bin/bash 行。

由于某种原因,没有设置环境 Qt 运行文件没有问题。但是一旦我设置了环境,它只会在我有 #! 的情况下运行。文件顶部的行。不知何故,设置环境改变了 Qt 执行文件的方式....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多