【问题标题】:Command run in terminal but not in QProcess while PATHs are inserted命令在终端中运行,但在插入 PATH 时不在 QProcess 中
【发布时间】:2020-11-15 06:43:53
【问题描述】:

我想使用 QProcess 在 Ubuntu 中通过 Qt 运行命令。 我的命令是fluent3DMeshToFoam <mesh address> 当我将它运行到终端时,它可以并在特定位置产生总和输出和文件。但我在使用 QProcess 运行它时遇到问题。

我注意到我应该将fluent3DMeshToFoam 的路径添加到我的 QProcess 对象的 ProcessEnvironment 中。所以我做了:

QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PATH" , "<path of fluent3DMeshToFoam>");
myProcess.setProcessEnvironment(env);
myProcess.start("fluent3DMeshToFoam" , QStringList() << "<mesh address>");
myProcess.waitForFinished(-1);

我连接了readyRead()errorOccurred() 信号,运行后,errorOccurred 信号发出并显示以下错误:

execve: No such file or directory

我搜索了很多,但找不到问题所在。 谢谢。

【问题讨论】:

  • 你是如何安装fluent3DMeshToFoam的?
  • @eyllanesc 它是 OpenFOAM5 程序的一部分,我已使用以下链接在离线模式下安装它:openfoam.org/download/5-0-source
  • 您确定路径设置正确吗?另请注意,QProcess::insert("PATH",...替换任何名为PATH 的现有变量。例如如果我在/opt/bin/fluent3DMeshToFoam 上安装了fluent3DMeshToFoam,我会使用env.insert("PATH", env.value("PATH") + ":/opt/bin") 之类的东西。
  • @G.M.如您所述,我更改了代码,但错误仍然存​​在。另请注意,当我在终端中运行echo $PATH 时,fluent3DMeshToFoam 的安装路径可用,但是当我在qDebug env.value("PATH") 之前env.insert(...)fluent3DMeshToFoam 的路径不可用。
  • 这个帖子可能有用:qtcentre.org/threads/…

标签: qt path qprocess openfoam


【解决方案1】:

查了好久,终于发现LD_LIBRARY_PATH有问题,Qt没有考虑到。

在不使用setProcessEnvironment(...) 的情况下,我在运行之前打开终端和export LD_LIBRARY_PATH,如下所示:

export LD_LIBRARY_PATH 
exec "./my_app"

那么 my_app 就会知道所有存储在 LD_LIBRARY_PATH 的库

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多