Pythonを使用した複数行コマンドの実行

Pythonを使用した複数行コマンドの実行

Pythonには、Pythonステートメントをプログラムに引数として渡すオプションがあります。

使用例は次のとおりです。

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

Pythonのマニュアルページで、私たちは以下を読んでいます。

電話したとき-氏実行するコマンド
       コマンドで提供されるPythonステートメント。ここのコマンドには複数を含めることができます
       複数のドアは改行で区切られています。

複数行を渡そうとしましたが失敗しました。

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

私も成功せずにこの文書を試しました。これをどのように実行しますか?

答え1

これに頼るのではなく、シェルでサポートされているhere-docを使用してくださいpython。これにより、スクリプトと同様に、複数レベルの引用符と型コードのネストが自由に必要になります。

-実行後は、python実行するコマンドがここで提供されている標準入力から出てくることを意味します。ほとんどのユーティリティはこれを実装します。言い換えれば、-コマンドに続くものは、解析が必要な標準入力から入力が出ることを意味します。

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

\nまた、シェルは、またはなどのコマンドを使用しないとエスケープされたリテラルを認識しません。文字列は、実行可能ファイルに渡される前にデフォルトのシェルで処理されます。リテラルに使用できる特別な処理がないため、シェルはリテラルを複数行に拡張しません。printfecho -e".."\n

-c使用するときは、Enter端末のキーを押して次のコマンドセットを入力して暗黙的に改行を生成する必要があります。

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

これを引き続き使用しpython -cて実行するもう1つの方法は、文字列を定義してから行うことです".."bash/で実行する1つの方法は、次をzsh使用することです。ANSI-Cの引用そして

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

つまり、シェルは実行可能ファイルに渡す前と他のエスケープシーケンスを拡張します$'..'。通訳者は、2つの別々の行を渡すことができます\npython

よく書かれたクロスサイトのトリックもあります。StackOverflow - 1つのコマンドラインで複数行のステートメントを実行しますか?これを説明してください。

関連情報