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 不会将其扩展到多行。printf
echo -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 - 在一行命令行中执行多行语句?解释这一点。