この回答ターミナルのコマンドラインで複数行のPythonコードを実行する方法について説明します。私は入れ子になったインデントを使用してもシェルスクリプトで答えがうまく機能することがわかりました。
#!/bin/bash
some_text="Hello world"
echo $some_text
cat <<EOF | python -
import sys;
for r in range(3):
print r
for a in range(2):
print "hello"
EOF
印刷:
0
hello
hello
1
hello
hello
2
hello
hello
しかし、シェルスクリプトとPythonコードスニペット間で変数を共有するのに問題があります。
BashスクリプトからPython添字の出力を収集する方法は? (例:のような変数から
$output
)。bash変数(例
$some_text
:)をPythonスクリプトにどのように渡しますか?
ベストアンサー1
Python変数の取得
EOF
(トークンが引用されていない場合)python
テキストが区切り文字から標準入力に渡される前に変数置換が発生するため、変数をスクリプトに直接投げることができます。
python - <<EOF
some_text = "$some_text"
EOF
もしsome_text
そうならtest
、Pythonはそれを見るでしょうsome_text = "test"
。ただし、これはコード注入の脆弱性と見なされる可能性があることに注意してください。たとえば、some_text
wasの場合、Pythonは次のことを確認します。"; import os; os.system("evil-command"); x = "
some_text = ""; import os; os.system("evil-command"); x = ""
そしてその邪悪なコマンドを実行してください。
変更せずにPythonコードをスクリプトに直接インポートするには、変数をエクスポートできます。
export some_text
os.environ
それを検索するために使用されました。
some_text = os.environ['some_text']
これはよりスマートで安全なアプローチです。
Pythonから出力を取得する
コマンド置換を使用してスクリプトの出力を収集できます。
output=$(
python - <<EOF
import sys;
for r in range(3):
print r
for a in range(2):
print "hello"
EOF
)
(末尾の改行は削除されます。)