gpt4 book ai didi

matlab - 在matlab中获取命令行参数

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

这可能太简单了,但我无法用谷歌搜索这个问题的答案:如何在 matlab 脚本中获取命令行参数。

我将 matlab 运行为 matlab -nodisplay -r "run('script.m')" 并且我想将所有参数作为列表返回。类似于 python sys.argv 的东西。我怎样才能做到这一点?

我正在使用 Linux Mint 和 MATLAB 2015a。

最佳答案

我想出了一个适用于 Windows 和 Linux (Ubuntu) 的简单函数:

function args = GetCommandLineArgs()

if isunix
fid = fopen(['/proc/' num2str(feature('getpid')) '/cmdline'], 'r');
args = textscan(fid, '%s', 'Delimiter', char(0));
fclose(fid);
else
kernel32WasAlreadyLoaded = libisloaded('kernel32');
if ~kernel32WasAlreadyLoaded
temporaryHeaderName = [gettempfolder '\GetCommandLineA.h'];
dlmwrite(temporaryHeaderName, 'char* __stdcall GetCommandLineA(void);', '');
loadlibrary('kernel32', temporaryHeaderName);
delete(temporaryHeaderName);
end
args = textscan(calllib('kernel32', 'GetCommandLineA'), '%q');
if ~kernel32WasAlreadyLoaded
unloadlibrary kernel32;
end
end

args = args{1};

在您的示例调用中,它将返回:

>> GetCommandLineArgs

args =

'/[path-to-matlab-home-folder]/'
'-nodisplay'
'-r'
'run('script.m')'

它返回一个字符串元胞数组,其中第一个字符串是 MATLAB 主文件夹的路径(在 Linux 上)或 MATLAB 可执行文件的完整路径(在 Windows 上),其他字符串是程序参数(如果有)。

工作原理:

  • 在 Linux 上:该函数使用 feature 获取当前的 Matlab 进程 ID功能(请注意这是一个未记录的功能)。并读取 /proc/[PID]/cmdline 文件,on Linux给出任何进程的命令行参数.这些值由空字符 \0 分隔,因此 textscan带分隔符 = char(0)。

  • 在 Windows 上:函数调用 GetCommandLineA ,它返回字符串上的命令行参数。然后它使用 textscan拆分单个字符串上的参数。 GetCommandLineA 函数是使用 MATLAB 的 calllib 调用的.它需要一个头文件。由于我们只想使用一个函数,它会在临时文件夹中动态创建头文件,并在不再需要后将其删除。此外,如果库已加载(例如,如果调用脚本已出于其他目的加载它),该函数会注意不要卸载库。

关于matlab - 在matlab中获取命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802872/

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