用三引号引起的多行字符串抛出EOF错误

问题描述 投票:0回答:2

我正在尝试传递多行字符串。该字符串是一组将在远程计算机上执行的命令。

我知道我可以在子流程模块中使用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 python-2.7 string-literals
2个回答
0
投票

尝试用\"{}\"替换'{}'


0
投票

让我们看看它变成了什么:

"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(\"{}\")''')\""
© www.soinside.com 2019 - 2024. All rights reserved.