三引号多行字符串抛出 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\")''')\"
我正在尝试传递多行字符串。该字符串是一组要在远程计算机上执行的命令。
我知道我可以在子进程模块中使用 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\")''')\"