Я должен запустить код 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
Но должно быть что-то более элегантное, чем это. Любые советы?