我正在尝试在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)。并且它至少尝试运行命令,但是由于" '\ "
混乱,它没有看到所需的'
。
如何正确地排除引号?
通过多个外壳转义引号是一场噩梦。原则上,您应该同时逃避\
和'
字符,从而导致\\\'
:
run(\\\'/Test/TF03_MatLabCommands_and_results.m\\\')
但这取决于所使用的shell,以及它们如何解析字符串,最终得到的转义字符和引号的确切组合是什么。
一个更简单的解决方案是完全避免使用引号。在MATLAB中,
run('/Test/TF03_MatLabCommands_and_results.m')
是相同的
run Test/TF03_MatLabCommands_and_results.m
只要文件名中没有空格,后者就不需要引号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句