从URL

时间:2017-09-12 16:21:50

标签: matlab

相当简单的问题,但我无法通过Google或Stack找到答案。

我有一个用例,最好只从URL读取.m MATLAB脚本。

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:2)

<disclaimer>

显然,只对您完全控制的文件执行此操作(和/或找到具有更好验证的解决方案)。这是一种“危险”的方法,因为没有检查您是否不打算运行一个文件,例如,将整个硬盘复制到Bob的计算机上,然后再破坏它。鲍勃和爱丽丝可能整晚都在嘲笑你尴尬的假日照片。

将此更多地视为概念证明而不是操作方法,它解决了您的问题,但绝不应该在生产代码中使用。

</disclaimer>

您需要使用eval来评估代码。每当我提到eval时,我都不得不指出it's not recommended,特别是在这种情况下,因为您可以评估网络上该文件中存在的随机代码!在这种情况下,您唯一的选择是在本地保存文件并调用run

然后你可以使用

eval(urlread('http://myscript.m'))

或者,由于不推荐urlread(来自docs),您可以使用webread并指定输出应为文字in the options

eval(webread('http://myscript.m', weboptions('ContentType', 'text')))

使用webread似乎真的慢,不知道为什么它是推荐的功能。鉴于此,urlread可能更可取。

webread文档中有一条说明表明您甚至不需要指定weboptions

  

如果Web服务返回扩展名为.m的MATLAB®文件,则该函数将其内容作为字符向量返回。

虽然你建议webread返回一个不起作用的uint8变量。

答案 1 :(得分:0)

如果您想要保存网址中的文件然后运行它,您可以使用websavestr2func,如下所示:

fcnName = 'newscript';    % Name for the function/script file
websave([fcnName '.m'], 'http://myscript.m');  % Download and save it
fcn = str2func(fcnName);  % Create function handle
fcn();                    % Evaluate function/script

当然,你应该确实确保你可以信任文件的来源,否则你将会度过一段美好的时光。