pythonファイルを実行せずに実行できる場合、ファイル拡張子は何をしますか?


1

Ubuntu 14.04を使用しています。今日、驚くべき発見があります。ファイル拡張子なしでpythonファイルを実行できます。

例えば

$ echo " print 'hello' " > z
$ python z
hello

それでは、なぜファイル拡張子が必要なのでしょうか?ファイルが何であるかを意味的に伝える以外に、ファイルに本物の影響を与えますか?


3
postfixによるファイル拡張子を意味しますか?Linuxでは必要ありませんが、MS Windowsでは、スクリプトの前にを付けずにスクリプトを呼び出す場合に重要ですpython
チョロバ14年

1
choboraと同じ-ファイル拡張子について話していますか?'python'を呼び出すことで '.py'を追加する必要はほとんどありません。pythonを呼び出すと、Pythonファイルで作業していると見なされます。
ルート14年

@チョロバ、はい、私は拡張機能を意味する

Windowsはファイルを実行するために拡張機能を「必要としません」(上記とまったく同じ構文を使用できます(例:「python」はWindowsで使用可能だと仮定して「python z」)。プログラムを手動で選択する必要があります-Windows GUIでは面倒になる可能性があります)。
アナクスナマン14

回答:


2

拡張機能について話している場合、LinuxはWindowsと同じように拡張機能を使用しません。実際、Linuxでは拡張機能はまったく意味がなく、ファイル名の一部にすぎません。人々がファイルを認識しやすくするために、それらはまだ多く使用されています。拡張機能が使用されない一般的な状況の1つは、バイナリ実行可能ファイルの使用です(python代わりに使用できますpython.exe)。

スクリプトを実行するには2つの方法があります。

  • シェルからの呼び出し(./scriptname.py):スクリプトでは、最初の行はの行に沿って何かを言います#!/usr/bin/python#!スクリプトのインタプリタとして、後続のファイルを使用するようにカーネルに指示します。

    http://en.wikipedia.org/wiki/Shebang_%28Unix%29から

    シバンは、実際には実行可能ファイル内の人間が読み取れるマジックナンバーのインスタンスであり、マジックバイト文字列は0x23 0x21、#!のASCIIの2文字エンコーディングです。このマジックナンバーは、画像ファイルがスクリプトか実行可能バイナリかを決定する関数の「exec」ファミリによって検出されます。シバンが存在すると、指定された実行可能ファイル、通常はスクリプトの言語のインタープリターが実行されます。

  • 引数としてスクリプトを使用してインタープリターを呼び出します(python scriptname)。これを行う場合、インタープリターを起動し、実行するスクリプトを明示的に指示します。スクリプトは、任意の「拡張子」を持つ任意のファイルにすることができます。


また、この行を使用して#!/usr/bin/env python、インストールされている場所に関係なくpythonを見つけることもできます。(Envは常に/ usr / binにあるため、移植性が必要な場合は直接パスではなくそれを使用することをお勧めします)。
ヘネス14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.