我正在尝试在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)。并且它至少尝试运行命令,但是由于" '\ "
的混乱,它没有看到所需的'
。
如何正确地排除引号?
答案 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
只要文件名中没有空格,后者就不需要引号。