Выполнение команды Python для ssh на компьютере и запуска MATLAB на этом компьютере - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь запустить эту команду в 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 Ответ

0 голосов
/ 20 марта 2019

Выход из кавычек через несколько оболочек - это кошмар. В принципе вы должны экранировать символы \ и ', что приводит к \\\':

run(\\\'/Test/TF03_MatLabCommands_and_results.m\\\')

Но это зависит от того, какие оболочки используются, и как они анализируют строки, какова точная комбинация escape-символов и кавычек.

Более простое решение - полностью избежать кавычек. В MATLAB

run('/Test/TF03_MatLabCommands_and_results.m')

совпадает с

run Test/TF03_MatLabCommands_and_results.m

Последний не требует кавычек, если в имени файла нет пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...