我正在尝试传递多行字符串。该字符串是一组将在远程计算机上执行的命令。
我知道我可以在子流程模块中使用ssh执行命令,但是由于需求限制,我必须将其作为字符串传递。
some_variable = "python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\"".format(file_path)
execute_cmd_on_remote(some_variable)
我收到以下错误:
u' File "<string>", line 1
exec(\'\'\'import subprocess
^
SyntaxError: EOF while scanning triple-quoted string literal
尝试用\"{}\"
替换'{}'
。
让我们看看它变成了什么:
"python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\""
Python内部删除一个转义层:
python -c "exec('''import subprocess
subprocess.Popen("<file_path>")'''"
这现在有一个'raw'换行符,这意味着远程shell / cmd-executer看到两行并执行两个命令:
python -c "exec('''import subprocess
subprocess.open("<file_path>")'''
令我惊讶的是,外壳程序执行此操作时没有错误,但是python
-命令接收到以下字符串:
exec('''导入子进程
现在显示异常的来源。要解决此问题,只需在换行符中添加更多转义符层:
"python -c \"exec('''import subprocess\\nsubprocess.Popen(\"{}\")''')\""