gpt4 book ai didi

matlab - 在运行时为 Mac 和 Linux 获取已部署的 Matlab 应用程序的位置

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:25 25 4
gpt4 key购买 nike

我有一些独立的 Matlab 程序,出于不同的原因需要访问它们所在目录中的文件(启动另一个程序或读取那里的一些 XML 文件)。我有以下适用于 Windows 的功能:

function execDir = get_deployed_exec_dir()
% Returns the directory of the currently running executable, if deployed,
% an empty string if not deployed (or if unable to determine the directory)
execDir = '';
if isdeployed
[status, execDir] = system('path');
if status == 0
execDir = char(regexpi(execDir, 'Path=(.*?);', 'tokens', 'once'));
end
end

为了让它在 Linux 和 Mac 上工作,我想我可以用 system('echo $PATH') 替换 system('path') 并改变常规表达式以适应 Unix 语法,但与 Windows 不同的是,当前运行的可执行文件的目录似乎不会自动添加到路径变量的前面。 Matlab 中有没有办法获取当前运行的可执行文件的目录(我知道有脚本,但部署时似乎无法正常工作),或者我应该在运行前编辑设置 MCR 的脚本应用程序设置我的代码可以使用 system 命令读取的变量?

具体来说,用户计算机上的某处是文件夹EXECFOLDER,其结构为:

EXECFOLDER
| exec1
| exec2
| run_exec1.sh
| run_exec2.sh
| data.xml

我想找出 EXECFOLDER 的路径,而不管用户在哪里运行 run_exec1.sh(设置 MCR 并调用 exec1< 的脚本), 以便 exec1 可以从 data.xml 中读取并执行 exec2

尝试总结:

  • system('echo $PATH'):可执行目录不在 Mac 和 Linux 的路径上
  • matlabroot:MCR 的位置
  • pwd:用户的当前文件夹,以完整路径运行时可能与可执行文件的位置不同
  • dbstack:解压后.m文件所在位置
  • which:解压后的.m文件所在位置
  • fileattrib:解压后.m文件所在位置

最佳答案

函数ctfroot做你需要的?

ctfroot 是来自 MATLAB Compiler 的命令。来自文档:

root = ctfroot returns a string that is the name of the folder where the deployable archive for the deployed application is expanded.

您可能只想在 if isdeployed block 中使用命令 ctfroot

编辑

如果您需要可执行文件的位置,而不是它展开后的位置,您可以使用以下函数:

function currentDir = getcurrentdir
if isdeployed % Stand-alone mode.
[status, result] = system('path');
currentDir = char(regexpi(result, 'Path=(.*?);', 'tokens', 'once'));
else % MATLAB mode.
currentDir = pwd;
end

这是因为可执行文件的路径在运行时作为可执行文件的第一个条目添加到 PATH 变量中。

或者,您可以创建一个 MEX 文件来执行类似的工作。参见 this MathWorks support回答更多详细信息和示例 MEX 文件。

关于matlab - 在运行时为 Mac 和 Linux 获取已部署的 Matlab 应用程序的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com