input
モジュールのfileinput
関数を使用して、pipes
またはinput file
を介してスクリプトを受け入れます。最小のスクリプトは次のとおりです。
finput.py
import fileinput
with fileinput.input() as f:
for line in f:
print(line)
このスクリプトを実行可能にした後、ls | ./finput.py
を実行し、unexpected error message
を取得します
./finput.py: line 1: import: command not found
./finput.py: line 3: syntax error near unexpected token `('
./finput.py: line 3: `with fileinput.input() as f:'
見つかった唯一の修正は、インポートステートメントの前に#!/usr/bin/env/python3
を追加することです。
しかし、この問題はfileinput
モジュールのみに関連しているようです。次のスクリプトはShebang
なしでうまく機能したため:
fruit.py
import random
fruits = ["mango", "ananas", "Apple"]
print(random.choice(fruits))
今、私は何が欠けていますか? import
が必須 in finput.py
ではないため、なぜShebang
コマンドが見つからないのですか?
これがPythonプログラムである場合、それ以外の場合は、シェルスクリプトとして解釈される(import
コマンドが見つからない)OSに伝える必要があります。
あなたが特定したように、これはシェバン行を使用して行われます:
#!/usr/bin/env python3
これは、次のようなスクリプトを実行する場合にのみ必要です:./script.py
は、OSに「この実行可能ファイルを実行する」ことを伝えます。そのためには、OSがプログラムの実行方法を特定する必要があり、そのために(特に)Shebangラインに依存しています。
ただし、python script.py
(これはあなたがfruit.py
)、そしてPythonは、それがPythonプログラムであるかどうかをOSに尋ねないので、Shebang行は重要ではありません。