使用 Python 运行多行命令

exi*_*tus 2 python

Python 有一个选项允许我们将 python 语句作为参数传递给程序。

\n\n

一个示例用法是

\n\n
$ python -c "print(\\"I\'m running Python.\\")"\nI\'m running Python.\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Python 的手册页中我们读到

\n\n
当使用-c命令调用时,它会执行作为命令给出的 Python 语句。这里的命令可能包含多个由换行符分隔的\xe2\x80\x90\n ple语句。
\n\n

我试图传递多行,但不能:

\n\n
$ python -c "print(0)\\nprint(1)"\n  File "<string>", line 1\n    print(0)\\nprint(1)\n                     ^\nSyntaxError: unexpected character after line continuation character\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也尝试过这里文档但没有成功。我该如何进行这项工作?

\n

Ini*_*ian 6

使用 shell 支持的here-doc,而不是依赖python. 这样,您需要对引号进行多层嵌套,并像在脚本上一样自由地键入代码。

可执行文件-后面的python意味着要运行的命令来自您从此处文档提供的标准输入。大多数实用程序都实现了这一点,即-命令后面的 意味着输入来自需要解析的标准输入。

python - <<'EOF'
print("I'm running Python.")
print("Are you now?")
EOF
Run Code Online (Sandbox Code Playgroud)

如果没有像或\n那样使用它们的命令,shell也无法识别转义的文字。其中的字符串在传递给可执行文件之前由底层 shell 进行处理。由于没有可用于文字的特殊处理,因此 shell 不会将其扩展到多行。printfecho -e".."\n

-c在使用时,您仍然应该通过按Enter终端上的按键并继续键入下一组命令来隐式生成换行符

python -c "print(0)
> print(1)"
Run Code Online (Sandbox Code Playgroud)

仍然使用和执行此操作的另一种方法python -c是定义字符串,以便在"..". bash在/中执行的一种方法zsh是使用ANSI-C 引用并执行

python -c $'print(0)\nprint(1)'
Run Code Online (Sandbox Code Playgroud)

即,在将其传递给可执行文件之前,shell 会扩展$'..'the和其他一些转义序列。\n现在你的python解释器看到传递给它的两行单独的行。

StackOverflow上也有写得很好的跨站点欺骗- Executing multi-line statements in the one-line command-line? 解释这一点。