一旦我通过 ssh 连接到我想要使用的计算机,以下命令就会起作用。
cd /Volumes/promiseraid9/workspace/sarah2/Facility/; /Applications/MATLAB_R2017a.app/bin/matlab -r "cd /volumes/promiseraid9/workspace/colleen/NewResiduals/j078_8; try, run('ABOVE2019_TF01_MatLabCommands_Test.m'); end; cd /Volumes/promiseraid9/workspace/sarah2/Facility; resid_process_GPS(in_dir_list,out_dir_list);"
但是,我希望能够从 python 脚本中使用 ssh 并使用上面的命令,但结果完全如上所示(意味着所有相同的 's 和 "s)
所以我的问题是处理转义字符...
os.system('ssh -t cmbrook3@gs694-vegasx2.gsfc.nasa.gov \'cd /Volumes/promiseraid9/workspace/sarah2/Facility/; /Applications/MATLAB_R2017a.app/bin/matlab -r "cd /volumes/promiseraid9/workspace/colleen/NewResiduals/j078_8; try, run(\'ABOVE2019_TF01_MatLabCommands_Test.m\'); end; cd /Volumes/promiseraid9/workspace/sarah2/Facility; resid_process_GPS(in_dir_list,out_dir_list); end;"\'')
主要问题是 MatLab 看到的 run(\'ABOVE2019_TF01_MatLabCommands_Test.m\') 完全一样,而不仅仅是 run('ABOVE2019_TF01_MatLabCommands_Test.m')
那么在这种情况下我可以使用什么样的转义字符?
最佳答案
您可以将命令放入三引号中,如下所示:
command_to_run = (
'''ssh -t cmbrook3@gs694-vegasx2.gsfc.nasa.gov'''
''' 'cd /Volumes/promiseraid9/workspace/sarah2/Facility/; '''
'''/Applications/MATLAB_R2017a.app/bin/matlab -r '''
'''"cd /volumes/promiseraid9/workspace/colleen/NewResiduals/j078_8;'''
'''try, run ABOVE2019_TF01_MatLabCommands_Test.m; end; '''
'''cd /Volumes/promiseraid9/workspace/sarah2/Facility;'''
''' resid_process_GPS(in_dir_list,out_dir_list);"' '''
).strip()# command_to_run is a string
os.system(command_to_run)
三重引号允许您将引号放入字符串中而不转义它们。
编辑:使用@ColleenB建议的修改来编辑代码。
Edit2:关于strip
函数的更多解释,我用它来删除最后一个空格。没有它,Python 无法解释最后三个引号(我也可以使用三个双引号而不是简单的双引号)。
括号允许将字符串拆分为多行,而不是使用很长的行。
关于python - 如何将 Python 转义字符与 MatLab 命令结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777974/