运行Python命令SSH到计算机并在该计算机上运行MATLAB

时间:2019-03-20 14:57:28

标签: 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 个答案:

答案 0 :(得分:0)

通过多个外壳转义引号是一场噩梦。原则上,您应该同时转义\'字符,并导致\\\'

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

但这取决于所使用的shell,以及它们如何解析字符串,最终得到的转义字符和引号的确切组合是什么。

一个更简单的解决方案是完全避免使用引号。在MATLAB中,

run('/Test/TF03_MatLabCommands_and_results.m')

相同
run Test/TF03_MatLabCommands_and_results.m

只要文件名中没有空格,后者就不需要引号。