Python

使用 Python 執行多行命令

  • May 22, 2019

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

我也試過 Here-documents 沒有成功。我該如何進行這項工作?

使用 shell 支持的 here-doc,而不是依賴python. 這樣,您需要對引號進行多級嵌套,並像在腳本上一樣自由地鍵入程式碼。

-after執行檔意味著要執行的python命令來自您從 here-doc 提供的標準輸入。大多數實用程序都實現了這一點,即-在命令之後意味著輸入來自需要解析的標準輸入。

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

\n如果沒有使用它們的命令(如printfor ),shell 也無法辨識文字轉義echo -e。其中的字元串在".."將其傳遞給執行檔之前由底層 shell 處理。由於沒有可用於文字\n的特殊處理,shell 不會將其擴展為多行。

您仍然應該在使用時隱式生成換行符,方法-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 上還有寫得很好的跨站點欺騙- 在單行命令行中執行多行語句?解釋這一點。

引用自:https://unix.stackexchange.com/questions/520357