import os
bashまたはbashfrom sys import stdout
に新しいPythonインタプリタを作成し、モジュールをインポートするように指示するように小さなbash関数を作成したいと思います。
後者のfrom
関数は次のとおりです。
from () {
echo "from $@" | xxd
python3 -i -c "from $@"
}
私がこう呼んだら:
$ from sys import stdout
00000000: 6672 6f6d 2073 7973 2069 6d70 6f72 7420 from sys import
00000010: 7374 646f 7574 0a stdout.
File "<string>", line 1
from sys
^
SyntaxError: invalid syntax
>>>
のバイトはfrom sys
次のとおりです。
66 72 6f 6d 20 73 79 73 20
f r o m s y s
EOFはありませんが、PythonインタプリタはEOFを読むのと同じように動作します。ストリームの末尾に改行文字があり、これは予想される現象です。
from
完全なPythonモジュールをインポートする姉妹は次のとおりです。これは文字列を削除して処理し、存在しないモジュールで失敗して問題を解決します。
import () {
ARGS=$@
ARGS=$(python3 -c "import re;print(', '.join(re.findall(r'([\w]+)[\s|,]*', '$ARGS')))")
echo -ne '\0x04' | python3 -i
python3 -c "import $ARGS" &> /dev/null
if [ $? != 0 ]; then
echo "sorry, junk module in list"
else
echo "imported $ARGS"
python3 -i -c "import $ARGS"
fi
}
これはストリームで説明されていないEOFの問題を解決しますが、PythonがEOFを持っていると思う理由を理解したいと思います。
ベストアンサー1
テーブルは中です。このスタックオーバーフローの回答(これはバッシュハッカーウィキ) さまざまな Bash 変数を拡張する方法を説明します。
あなたがやっていることは、1つpython -i -c "from $@"
の引数だけを許可するpython -i -c "from sys" "import" "stdout"
ので、-c
コマンドを実行しますfrom sys
。を使用しようとすると、$*
次に展開されますpython -i -c "from sys import stdout"
($IFS
未設定または空白で始まると仮定)。