poster
2019-12-10, 20:30
如何检查脚本/函数中已安装的MATLAB工具箱? (检查工具箱版本也不错!)当有人尝试在没有所需工具箱的情况下运行脚本时,这可能会提供快速且有用的错误消息。
我想到的一个快速(尽管很粗糙)的解决方案是解析ver (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/ver.html)命令的文本输出。我想知道是否有更好的方法。
一些快速搜索显示的ver product或带有'test'参数的license (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/license.html)功能可能有用,但是我找不到工具箱名称(即'Image Processing Toolbox' )到产品名称(即'control' )的映射,或者功能名称(即image_toolbox )。
此外,当我运行license('inuse') ,我仅收到以下信息:
>> a =许可证(“正在使用”);一种a = 功能:“ matlab” 用户:我希望列出我可以访问的许多工具箱。
尝试早期测试同事脚本提示了此问题。不幸的是,它需要我目前缺少的图像处理工具箱。一条有用的错误消息将节省尝试诊断问题的时间。现在,我将等待编译后的版本进行测试。
回答:
ver (https://www.mathworks.com/help/matlab/ref/ver.html)函数的一个缺点是,它只会告诉您已安装的内容 ,而不会告诉您具有可用许可证的内容 。可能安装了工具箱,但没有使用它的许可证(或者其他用户可以签出所有可用的许可证)。更好的选择是license (https://www.mathworks.com/help/matlab/ref/license.html)功能,如您所指出的那样,每个工具箱都需要一个唯一的“功能字符串” (https://www.mathworks.com/help/matlab/ref/license.html#buk96bm-1-feature) 。
这是从现已失效的新闻组线程中 (http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/244320)获取的各种工具箱的功能字符串的较旧列表(链接现已消失):
featureStr = {'Aerospace_Blockset'; ... 'Aerospace_Toolbox'; ... 'Bioinformatics_Toolbox'; ... 'Communication_Blocks'; ... 'Communication_Toolbox'; ... 'Compiler'; ... 'Control_Toolbox'; ... 'Curve_Fitting_Toolbox'; ... 'Data_Acq_Toolbox'; ... 'Database_Toolbox'; ... 'Datafeed_Toolbox'; ... 'Dial_and_Gauge_Blocks'; ... 'Distrib_Computing_Toolbox'; ... 'Econometrics_Toolbox'; ... 'EDA_Simulator_Link_DS'; ... 'Embedded_Target_c166'; ... 'Embedded_Target_c2000'; ... 'Embedded_Target_c6000'; ... 'Embedded_Target_MPC555'; ... 'Excel_Link'; ... 'Filter_Design_HDL_Coder'; ... 'Filter_Design_Toolbox'; ... 'Fin_Derivatives_Toolbox'; ... 'Financial_Toolbox'; ... 'Fixed_Income_Toolbox'; ... 'Fixed_Point_Toolbox'; ... 'Fixed-Point_Blocks'; ... 'Fuzzy_Toolbox'; ... 'GADS_Toolbox'; ... 'IDE_Link_MU'; ... 'Identification_Toolbox'; ... 'Image_Acquisition_Toolbox'; ... 'Image_Toolbox'; ... 'Instr_Control_Toolbox'; ... 'Link_for_Incisive'; ... 'Link_for_ModelSim'; ... 'Link_for_Tasking'; ... 'Link_for_VisualDSP'; ... 'MAP_Toolbox'; ... 'MATLAB'; ... 'MATLAB_Builder_for_dot_Net'; ... 'MATLAB_Builder_for_Java'; ... 'MATLAB_Distrib_Comp_Engine'; ... 'MATLAB_Excel_Builder'; ... 'MATLAB_Link_for_CCS'; ... 'MATLAB_Report_Gen'; ... 'MBC_Toolbox'; ... 'MPC_Toolbox'; ... 'NCD_Toolbox'; ... 'Neural_Network_Toolbox'; ... 'OPC_Toolbox'; ... 'Optimization_Toolbox'; ... 'PDE_Toolbox'; ... 'Power_System_Blocks'; ... 'Real-Time_Win_Target'; ... 'Real-Time_Workshop'; ... 'RF_Blockset'; ... 'RF_Toolbox'; ... 'Robust_Toolbox'; ... 'RTW_Embedded_Coder'; ... 'Signal_Blocks'; ... 'Signal_Toolbox'; ... 'SimBiology'; ... 'SimDriveline'; ... 'SimElectronics'; ... 'SimEvents'; ... 'SimHydraulics'; ... 'SimMechanics'; ... 'Simscape'; ... 'SIMULINK'; ... 'Simulink_Control_Design'; ... 'Simulink_Design_Verifier'; ... 'Simulink_HDL_Coder'; ... 'Simulink_Param_Estimation'; ... 'SIMULINK_Report_Gen'; ... 'SL_Verification_Validation'; ... 'Spline_Toolbox'; ... 'Stateflow'; ... 'Stateflow_Coder'; ... 'Statistics_Toolbox'; ... 'Symbolic_Toolbox'; ... 'SystemTest'; ... 'Video_and_Image_Blockset'; ... 'Virtual_Reality_Toolbox'; ... 'Wavelet_Toolbox'; ... 'XPC_Embedded_Option'; ... 'XPC_Target'}; 这涵盖了许多常见的功能,但并不详尽,也不包含较新工具箱的功能字符串。对于所有MathWorks工具箱,似乎没有任何可用的当前功能字符串列表。我相信您可以在许可证文件的“ INCREMENT”行上找到它们,或者( 如评论中的vlee所述 (https://stackoverflow.com/questions/2060382/how-would-one-check-for-installed-matlab-toolboxes-in-a-script-function/2061547#comment1995076_2061547) )您可以从给定的工具箱中调用函数,然后使用license('inuse')从中获取功能字符串当前正在使用的工具箱的显示列表。但是,以上两个选项都已经需要可用的许可证。
使用上面的功能字符串列表和功能license (https://www.mathworks.com/help/matlab/ref/license.html) ,您可以检查要使用许可证的工具箱。以下代码检查上面整个列表的许可证:
index = cellfun(@(f) license('test', f), featureStr); availableFeatures = featureStr(logical(index)); 但是,以上内容只是确认许可证存在 ,而不是可以将其检出 。该许可证可能已过期,或者所有可用的许可证都可以由其他用户签出。为了绝对确定您将能够使用可用的工具箱,实际上您可以尝试签出所需许可证的许可证并进行测试以查看是否成功。以下代码尝试检出上面找到的所有可用工具箱的许可证:
index = cellfun(@(f) license('checkout', f), availableFeatures); checkedOutFeatures = availableFeatures(logical(index)); 警告词!:
就像Jason S在下面的评论中提到的那样 (https://stackoverflow.com/questions/2060382/how-would-one-check-for-installed-matlab-toolboxes-in-a-script-function/2061547#comment1992534_2061547) ,要故意许可证是一个坏主意,因为除非关闭MATLAB,否则这些许可证将不会发布。 您只应签出您知道给定应用程序所需的许可证!通常,除非您尝试使用给定工具箱中的功能,否则不会签出许可证。例如:
>> license('inuse') matlab >> gaussFilter = fspecial('gaussian'); % An Image Processing Toolbox function >> license('inuse') image_toolbox matlab
更多&回答... (https://stackoverflow.com/questions/2060382)
我想到的一个快速(尽管很粗糙)的解决方案是解析ver (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/ver.html)命令的文本输出。我想知道是否有更好的方法。
一些快速搜索显示的ver product或带有'test'参数的license (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/license.html)功能可能有用,但是我找不到工具箱名称(即'Image Processing Toolbox' )到产品名称(即'control' )的映射,或者功能名称(即image_toolbox )。
此外,当我运行license('inuse') ,我仅收到以下信息:
>> a =许可证(“正在使用”);一种a = 功能:“ matlab” 用户:我希望列出我可以访问的许多工具箱。
尝试早期测试同事脚本提示了此问题。不幸的是,它需要我目前缺少的图像处理工具箱。一条有用的错误消息将节省尝试诊断问题的时间。现在,我将等待编译后的版本进行测试。
回答:
ver (https://www.mathworks.com/help/matlab/ref/ver.html)函数的一个缺点是,它只会告诉您已安装的内容 ,而不会告诉您具有可用许可证的内容 。可能安装了工具箱,但没有使用它的许可证(或者其他用户可以签出所有可用的许可证)。更好的选择是license (https://www.mathworks.com/help/matlab/ref/license.html)功能,如您所指出的那样,每个工具箱都需要一个唯一的“功能字符串” (https://www.mathworks.com/help/matlab/ref/license.html#buk96bm-1-feature) 。
这是从现已失效的新闻组线程中 (http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/244320)获取的各种工具箱的功能字符串的较旧列表(链接现已消失):
featureStr = {'Aerospace_Blockset'; ... 'Aerospace_Toolbox'; ... 'Bioinformatics_Toolbox'; ... 'Communication_Blocks'; ... 'Communication_Toolbox'; ... 'Compiler'; ... 'Control_Toolbox'; ... 'Curve_Fitting_Toolbox'; ... 'Data_Acq_Toolbox'; ... 'Database_Toolbox'; ... 'Datafeed_Toolbox'; ... 'Dial_and_Gauge_Blocks'; ... 'Distrib_Computing_Toolbox'; ... 'Econometrics_Toolbox'; ... 'EDA_Simulator_Link_DS'; ... 'Embedded_Target_c166'; ... 'Embedded_Target_c2000'; ... 'Embedded_Target_c6000'; ... 'Embedded_Target_MPC555'; ... 'Excel_Link'; ... 'Filter_Design_HDL_Coder'; ... 'Filter_Design_Toolbox'; ... 'Fin_Derivatives_Toolbox'; ... 'Financial_Toolbox'; ... 'Fixed_Income_Toolbox'; ... 'Fixed_Point_Toolbox'; ... 'Fixed-Point_Blocks'; ... 'Fuzzy_Toolbox'; ... 'GADS_Toolbox'; ... 'IDE_Link_MU'; ... 'Identification_Toolbox'; ... 'Image_Acquisition_Toolbox'; ... 'Image_Toolbox'; ... 'Instr_Control_Toolbox'; ... 'Link_for_Incisive'; ... 'Link_for_ModelSim'; ... 'Link_for_Tasking'; ... 'Link_for_VisualDSP'; ... 'MAP_Toolbox'; ... 'MATLAB'; ... 'MATLAB_Builder_for_dot_Net'; ... 'MATLAB_Builder_for_Java'; ... 'MATLAB_Distrib_Comp_Engine'; ... 'MATLAB_Excel_Builder'; ... 'MATLAB_Link_for_CCS'; ... 'MATLAB_Report_Gen'; ... 'MBC_Toolbox'; ... 'MPC_Toolbox'; ... 'NCD_Toolbox'; ... 'Neural_Network_Toolbox'; ... 'OPC_Toolbox'; ... 'Optimization_Toolbox'; ... 'PDE_Toolbox'; ... 'Power_System_Blocks'; ... 'Real-Time_Win_Target'; ... 'Real-Time_Workshop'; ... 'RF_Blockset'; ... 'RF_Toolbox'; ... 'Robust_Toolbox'; ... 'RTW_Embedded_Coder'; ... 'Signal_Blocks'; ... 'Signal_Toolbox'; ... 'SimBiology'; ... 'SimDriveline'; ... 'SimElectronics'; ... 'SimEvents'; ... 'SimHydraulics'; ... 'SimMechanics'; ... 'Simscape'; ... 'SIMULINK'; ... 'Simulink_Control_Design'; ... 'Simulink_Design_Verifier'; ... 'Simulink_HDL_Coder'; ... 'Simulink_Param_Estimation'; ... 'SIMULINK_Report_Gen'; ... 'SL_Verification_Validation'; ... 'Spline_Toolbox'; ... 'Stateflow'; ... 'Stateflow_Coder'; ... 'Statistics_Toolbox'; ... 'Symbolic_Toolbox'; ... 'SystemTest'; ... 'Video_and_Image_Blockset'; ... 'Virtual_Reality_Toolbox'; ... 'Wavelet_Toolbox'; ... 'XPC_Embedded_Option'; ... 'XPC_Target'}; 这涵盖了许多常见的功能,但并不详尽,也不包含较新工具箱的功能字符串。对于所有MathWorks工具箱,似乎没有任何可用的当前功能字符串列表。我相信您可以在许可证文件的“ INCREMENT”行上找到它们,或者( 如评论中的vlee所述 (https://stackoverflow.com/questions/2060382/how-would-one-check-for-installed-matlab-toolboxes-in-a-script-function/2061547#comment1995076_2061547) )您可以从给定的工具箱中调用函数,然后使用license('inuse')从中获取功能字符串当前正在使用的工具箱的显示列表。但是,以上两个选项都已经需要可用的许可证。
使用上面的功能字符串列表和功能license (https://www.mathworks.com/help/matlab/ref/license.html) ,您可以检查要使用许可证的工具箱。以下代码检查上面整个列表的许可证:
index = cellfun(@(f) license('test', f), featureStr); availableFeatures = featureStr(logical(index)); 但是,以上内容只是确认许可证存在 ,而不是可以将其检出 。该许可证可能已过期,或者所有可用的许可证都可以由其他用户签出。为了绝对确定您将能够使用可用的工具箱,实际上您可以尝试签出所需许可证的许可证并进行测试以查看是否成功。以下代码尝试检出上面找到的所有可用工具箱的许可证:
index = cellfun(@(f) license('checkout', f), availableFeatures); checkedOutFeatures = availableFeatures(logical(index)); 警告词!:
就像Jason S在下面的评论中提到的那样 (https://stackoverflow.com/questions/2060382/how-would-one-check-for-installed-matlab-toolboxes-in-a-script-function/2061547#comment1992534_2061547) ,要故意许可证是一个坏主意,因为除非关闭MATLAB,否则这些许可证将不会发布。 您只应签出您知道给定应用程序所需的许可证!通常,除非您尝试使用给定工具箱中的功能,否则不会签出许可证。例如:
>> license('inuse') matlab >> gaussFilter = fspecial('gaussian'); % An Image Processing Toolbox function >> license('inuse') image_toolbox matlab
更多&回答... (https://stackoverflow.com/questions/2060382)