使用 Python 运行多行命令

使用 Python 运行多行命令

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

一个示例用法是

$ python -c "print(\"I'm running Python.\")"
I'm running Python.

在 Python 的手册页中我们读到

当被调用时-C命令,它执行
       作为命令给出的 Python 语句。这里的命令可能包含多个
       ple 语句由换行符分隔。

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

$ python -c "print(0)\nprint(1)"
  File "<string>", line 1
    print(0)\nprint(1)
                     ^
SyntaxError: unexpected character after line continuation character

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

答案1

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

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

python - <<'EOF'
print("I'm running Python.")
print("Are you now?")
EOF

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

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

python -c "print(0)
> print(1)"

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

python -c $'print(0)\nprint(1)'

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

还有写得很好的跨站点欺骗StackOverflow - 在一行命令行中执行多行语句?解释这一点。

相关内容