【问题标题】:Triple quoted multi line string throwing EOF error三引号多行字符串抛出 EOF 错误
【发布时间】:2019-10-04 06:29:50
【问题描述】:

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

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


    【解决方案1】:

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

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

    Python 在内部移除了一个转义层:

    python -c "exec('''import subprocess
    subprocess.Popen("<file_path>")'''"
    

    这现在有一个“原始”换行符,这意味着远程 shell/cmd 执行器看到两行并将执行两个命令:

    • python -c "exec('''import subprocess
    • subprocess.open("&lt;file_path&gt;")'''

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

    exec('''import subprocess
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      这将存储:

      python -c "exec('''导入子进程

      subprocess.Popen("")'''"

      在两个不同的行中。

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

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

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

      这样可以解决换行的问题,但有时会让人感到困惑,因为必须存储的变量字符串中有很多斜线。

      第二种解决方案是使用 Python Raw String: 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\")''')\"
      

      【讨论】:

        【解决方案3】:

        尝试将\"{}\" 替换为'{}'

        【讨论】:

          猜你喜欢
          • 2014-05-29
          • 1970-01-01
          • 1970-01-01
          • 2013-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多