【发布时间】: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