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

Triple quoted multi line string throwing EOF error

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

我知道我可以在子进程模块中使用 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>")'''

令我惊讶的是 shell 没有错误地执行此操作,但尽管如此,python-命令收到以下字符串:

exec('''import subprocess

现在显示异常的来源。要修复,只需在换行符中添加更多转义层:

"python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\""

每次当变量中有斜杠时,我都会遇到这种错误。 让我们看看你的变量存储了什么。

some_variable = "python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\"".format(file_path)

这将存储:

python -c "exec('''import subprocess

subprocess.Popen("")'''"

分两行。

由于变量中的行发生变化,python 正在创建一个异常。

我使用的解决方案之一是使用双斜杠:

 "python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\""

这将解决换行的问题,但有时会造成混淆,因为必须存储的变量字符串中有很多斜杠。

第二种解决方案是使用 Python 原始字符串: Python 原始字符串是通过在字符串文字前加上“r”或“R”来创建的。 Python 原始字符串将反斜杠视为文字字符。

因此,与其计算斜杠并将它们转换为双斜杠,不如这样做:

some_variable = r"python -c \"exec('''import subprocess\nsubprocess.Popen(\"{}\")''')\"".format(filepath)

这会将字符串原样存储在变量中:

python -c \"exec('''import subprocess\nsubprocess.Popen(\"ATS 2.pdf\")''')\"