#python #matlab #ssh
#python #matlab #ssh
Вопрос:
Я пытаюсь запустить эту команду в Python3. Каждая часть по отдельности работает корректно, но я не могу заставить их работать вместе.
os.system('ssh -t user@computer 'cd /MatLabFolder; /Applications/MATLAB_R2017a.app/bin/matlab -r "cd /Test; try, run('/Test/TF03_MatLabCommands_and_results.m'); end; quit"; bash -l'')
На данный момент TF03_MatLabCommands_and_results.m
в нем содержится только следующее
in_dir_list={'/Volumes/promiseraid9/workspace/colleen/NewResiduals/Test/58514_TF03_default','/Volumes/promiseraid9/workspace/colleen/NewResiduals/Test/58514_TF03_mask10'};
out_dir_list={'/Volumes/promiseraid9/workspace/colleen/NewResiduals/Test/58514_TF03_default','/Volumes/promiseraid9/workspace/colleen/NewResiduals/Test/58514_TF03_mask10'};
in_dir_list
По сути, я просто распечатываю то, что есть in_dir_list
, просто чтобы я мог видеть, что это работает.
Теперь, если я уже ssh
подключился к компьютеру, на котором хочу выполнить обработку, и запускаю
/Applications/MATLAB_R2017a.app/bin/matlab -r "cd /Test; try, run('/Test/TF03_MatLabCommands_and_results.m'); end; quit"
он выполняется так, как должен. Итак, я знаю, что команда UNIX верна.
Но если я запускаю первую команду, MATLAB не распознает, " ' "
как это делает Python, и просто удаляет '
все вместе, поэтому команда, которая запускается в MATLAB, в конечном итоге становится
cd /Test; try, run(/Test/TF03_MatLabCommands_and_results.m); end; quit
|
Error: Unexpected MATLAB operator.
Обратите внимание, что до и после M-файла и пути нет '
.
Я также знаю, что команда ssh также правильная, потому что ее выполнение до момента запуска команды в MATLAB также работает (это означает, что я могу подключиться к компьютеру по ssh и открыть MATLAB). И он пытается выполнить хотя бы команду, но из-за " ' "
путаницы он не видит необходимого '
.
Как мне правильно экранировать кавычки?
Ответ №1:
Экранирование кавычек через несколько оболочек — это кошмар. В принципе, вы должны экранировать оба
и '
символы, ведущие к \'
:
run(\'/Test/TF03_MatLabCommands_and_results.m\')
Но это зависит от того, какие оболочки используются, и как они анализируют строки, какую точную комбинацию escape-символов и кавычек вы получите в итоге.
Более простое решение — вообще избежать кавычек. В MATLAB,
run('/Test/TF03_MatLabCommands_and_results.m')
это то же самое, что
run Test/TF03_MatLabCommands_and_results.m
Последнее не требует кавычек, если в имени файла нет пробелов.
Комментарии:
1. Отлично, это сработало запустите Test/TF03_MatLabCommands_and_results. m Большое вам спасибо!!