2010-01-13 8 views
32

W jaki sposób można sprawdzić zainstalowane przyborniki MATLAB w skrypcie/funkcji? (sprawdzanie wersji przybornika również byłoby dobre!) To mogłoby zapewnić szybki i użyteczny komunikat o błędzie, gdy ktoś spróbuje uruchomić skrypt bez wymaganego zestawu narzędzi.W jaki sposób można sprawdzić zainstalowane przyborniki MATLAB w skrypcie/funkcji?

Szybkie, aczkolwiek szorstkie, rozwiązanie, które przychodzi na myśl, to parsowanie tekstu wyjściowego polecenia ver. Zastanawiam się, czy jest lepszy sposób.

Niektóre szybkie wyszukiwanie ujawnił ver product lub funkcja license z 'test' argumentem może być przydatne, ale nie mogłem znaleźć mapowanie nazw Przybornik (tj. 'Image Processing Toolbox') do nazw produktów (np. 'control') lub nazw funkcji (tj. image_toolbox).

Ponadto, gdy wpadłem license('inuse') tylko otrzymałem następujące:

 
>> a = license('inuse'); a 

a = 

    feature: 'matlab' 
     user: <username> 

mam nadzieję na liście wielu przyborniki mam dostęp.

To pytanie pojawiło się w wyniku wcześniejszego przetestowania skryptu współpracowników. Niestety, wymagało to narzędzia Image Processing Toolbox, którego obecnie brakuje. Przydatny komunikat o błędzie zaoszczędziłby czas na zdiagnozowanie problemu. Teraz poczekam na skompilowaną wersję, zanim ją przetestuję.

Odpowiedz

26

Jedną wadą funkcji VER jest to, że tylko mówi, co zainstalowany, co nie ma dostępną licencję. Możliwe jest zainstalowanie zestawu narzędzi i brak licencji na jego używanie (lub wszystkie dostępne licencje mogą być wyrejestrowane przez innych użytkowników). Lepszym wyborem jest funkcja LICENSE, która (jak wskazano) wymaga unikalnego "łańcucha znaków" dla każdego zestawu narzędzi.

Jest lista ciągów fabularnych dla różnych przyborniki na this newsgroup thread:

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'}; 

Korzystanie z tej listy i funkcji LICENSE, można sprawdzić, które przyborniki masz licencję na użytkowanie.Poniższe kod sprawdza o licencje na całej listy powyżej:

index = cellfun(@(f) license('test',f),featureStr); 
availableFeatures = featureStr(logical(index)); 

Jednak wyżej tylko potwierdza, że ​​licencja istnieje, że nie może to być wyrejestrowany. Licencja mogła wygasnąć lub wszystkie dostępne licencje mogły zostać wyewidencjonowane przez innych użytkowników. Aby mieć całkowitą pewność, że będziesz mógł korzystać z dostępnych zestawów narzędzi, możesz spróbować wykupić licencję na te, których potrzebujesz i przetestować, aby sprawdzić, czy odniosłeś sukces. Poniższy kod próbuje sprawdzić licencję na wszystkich dostępnych przyborniki znajdując powyżej:

index = cellfun(@(f) license('checkout',f),availableFeatures); 
checkedOutFeatures = availableFeatures(logical(index)); 

UWAGA:

Jak Jason S wspomina w komentarzu poniżej, że to zły pomysł, aby sprawdzić licencje willy- nilly, ponieważ nie będą one dostępne, dopóki nie zamkniesz MATLAB. Powinieneś tylko sprawdzić licencję, o której wiesz, że będziesz potrzebować dla danej aplikacji! Zwykle licencje nie są sprawdzane, dopóki nie spróbujesz użyć funkcji z danego zestawu narzędzi. Na przykład:

>> license('inuse') 
matlab 
>> gaussFilter = fspecial('gaussian'); %# An Image Processing Toolbox function 
>> license('inuse') 
image_toolbox 
matlab 
+0

Myślę, że najlepszą metodą byłoby użycie zarówno polecenia ver, jak i licencji. W ten sposób możesz poinformować użytkownika, czy w ogóle nie ma w nim zestawu narzędzi, czy po prostu trzeba czekać/krzyczeć, aż licencja stanie się dostępna. – Jonas

+6

Pamiętaj, że wykupienie licencji tylko w celu sprawdzenia, czy możesz wykupić licencję, jest złym **, ponieważ w MATLAB licencja nie zostanie wydana i nie będzie mogła zostać wydana, dopóki całkowicie nie zamkniesz MATLAB. To nie "ładnie gra" z udostępnionymi licencjami (zwłaszcza biorąc pod uwagę słabe ceny Mathworks dla skrzynek narzędziowych licencji sieciowych) –

+2

(jednak jeśli chcesz używać tego zestawu narzędzi mimo wszystko w funkcji powinno być dobrze) –

2

szybki sposób jest lista zawartości katalogu narzędziowe:

l = ls(toolboxdir('')) 

użyciu tej listy (z wyłączeniem kilku katalogów: wspólne, lokalne), można dowiedzieć się, zainstalowanego zestawu narzędzi przy użyciu ver wersję :

v = ver('nnet') 

jako punkt odniesienia, tutaj jest lista nazw katalogów narzędziowe miałem:

bioinfo 
curvefit 
database 
gads  
ident 
images 
nnet  
optim 
pde  
signal 
stats 
wavelet 
11

Ver wydaje się być drogą, a parsowanie nie powinno być takie trudne. Zobaczmy:

function tf = areTheseToolboxesInstalled(requiredToolboxes) 
%ARETHESETOOLBOXESINSTALLED takes a cell array of toolbox names and checks whether they are currently installed 
% SYNOPSIS tf = areTheseToolboxesInstalled(requiredToolboxes) 
% 
% INPUT requiredToolboxes: cell array with toolbox names to test for. Eg. 
%  {'MATLAB','Image Processing Toolbox'} 
% 
% OUTPUT tf: true or false if the required toolboxes are installed or not 
%%%%%%%%%%%%%%%%%%%%%%%%%% 

% get all installed toolbox names 
v = ver; 
% collect the names in a cell array 
[installedToolboxes{1:length(v)}] = deal(v.Name); 

% check 
tf = all(ismember(requiredToolboxes,installedToolboxes)); 

Nawiasem mówiąc, jeśli trzeba sprawdzić wersjach verLessThan jest twoim przyjacielem.

+0

Dzięki za wskazanie verLessThan. – vlee

+0

Dzięki za kod! – sum1stolemyname

1

Praktycznym rozwiązaniem byłoby, aby rozpocząć swój kod z try somefunction catch oświadczenie, w którym somefunction jest unikalny dla przybornika trzeba.

Urządzenie somefunction może zawieść z wielu powodów, na przykład brak dostępnych licencji lub zestaw narzędzi nie jest zainstalowany w systemie. Model try/catch pozwala znieść z wdziękiem i przekazać użytkownikowi zrozumiałą informację, dlaczego nie można wykonać żądanej operacji (teraz).

Wadą jest to, że jest to mniej ogólna metoda. Brakuje mu elegancji i jest wrażliwy na błędy przestrzeni nazw. Plusem jest to, że testuje, czy faktycznie działa somefunction. Jeśli jest używany mądrze, powinien chwytać udostępnione licencje tylko wtedy, gdy faktycznie ich potrzebujesz.

7

wiem, że jest to dość stare pytanie, ale naprawdę prosta odpowiedź jest rzeczywiście w pytaniu (analizować dane wyjściowe ver) ....

>> v = ver; 
>> setdiff({v.Name}, 'MATLAB')' 

ans = 

    'Aerospace Blockset' 
    'Aerospace Toolbox' 
    'Bioinformatics Toolbox' 
    'Communications System Toolbox' 
    'Computer Vision System Toolbox' 
    'Control System Toolbox' 
    'Conversion to SeDuMi' 
    'Curve Fitting Toolbox' 
    'DSP System Toolbox' 
    'Database Toolbox' 
    'Datafeed Toolbox' 
    'Econometrics Toolbox' 
    'Embedded Coder' 
    'Financial Derivatives Toolbox' 
    'Financial Toolbox' 
    'Fixed-Income Toolbox' 
    'Fixed-Point Toolbox' 
    'Fuzzy Logic Toolbox' 
    'Global Optimization Toolbox' 
    'Image Acquisition Toolbox' 
    'Image Processing Toolbox' 
    'Instrument Control Toolbox' 
    'MATLAB Coder' 
    'MATLAB Distributed Computing Server' 
    'MATLAB Report Generator' 
    'Mapping Toolbox' 
    'Model Predictive Control Toolbox' 
    'Neural Network Toolbox' 
    'Optimization Toolbox' 
    'Parallel Computing Toolbox' 
    'Partial Differential Equation Toolbox' 
    'Phased Array System Toolbox' 
    'RF Toolbox' 
    'Robust Control Toolbox' 
    'Signal Processing Toolbox' 
    'SimBiology' 
    'SimDriveline' 
    'SimElectronics' 
    'SimEvents' 
    'SimHydraulics' 
    'SimMechanics' 
    'SimPowerSystems' 
    'SimRF' 
    'Simscape' 
    'Simulink' 
    'Simulink 3D Animation' 
    'Simulink Coder' 
    'Simulink Control Design' 
    'Simulink Design Optimization' 
    'Simulink Fixed Point' 
    'Simulink Report Generator' 
    'Simulink Verification and Validation' 
    'Stateflow' 
    'Statistical Graphics Toolbox' 
    'Statistical Parametric Mapping' 
    'Statistics Toolbox' 
    'Symbolic Math Toolbox' 
    'System Identification Toolbox' 
    'SystemTest' 
    'Wavelet Toolbox' 
+1

Najprostszy sposób na zrobienie tego. Bez nadmiernie skomplikowanych funkcji, parsowania i czego jeszcze nie ... – rbaleksandar

3

wpisanie ver wyświetli pełną listę przyborniki zainstalowane w Matlaba.

Powiązane problemy