В MATLAB как хранить стандартный вывод Unix в массиве ячеек для многострочных команд? - PullRequest
1 голос
/ 25 октября 2019

Я должен запустить код Unix на удаленной системе, в которой нет MATLAB. Я называю это так:

% shared key between computers so no password required to type in
ssh_cmd = 'ssh login@ipaddress '; 
for x = 1:nfiles
  cmd = sprintf('calcPosition filename%d',x); 
  % as an example, basically it runs a c++ command 
  % on that computer and I pass in a different filename as an input
  full_cmd = [ssh_cmd, cmd];
  [Status,Message] = system(full_cmd);
  % the stdout is a mix of strings and numbers
  % <code that parses Message and handles errors>
end

Для небольшого теста это займет около 30 секунд. Если я установлю его так, чтобы

full_cmd = [ssh_cmd, cmd1; cmd2; cmdN]; % obviously not valid syntax here
% do the same thing as above, but no loop

, это заняло бы около 5 секунд, поэтому большая часть времени уходит на подключение к другой системе. Но Message - это объединенный стандартный вывод всех n файлов.

Я знаю, что могу передать результаты в отдельные файлы, но я бы предпочел передать их обратно в MATLAB без дополнительных операций ввода-вывода. Так есть ли способ получить стандартный вывод (Message) в виде массива ячеек (или эквивалент Unix) для каждой отдельной команды? Тогда я мог бы просто зациклить ячейки Message, и оставшуюся часть функции менять не нужно.

Я думал об использовании текста идентификатора вокруг каждого вызова команды как способ помочь разобрать Message, например

full_cmd = [ssh_cmd; 'echo "begincommand " '; cmd1; 'echo "begincommand " '; cmd2]; % etc

Но должно быть что-то более элегантное, чем это. Любые советы?

...