私の質問は、なぜファイル名を取得するためにこのコードをすべて書かなければならないのかということです:
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
一つ一つ見ていきましょう。
まず、print
は PHP の よりも 1 文字長いですecho
。あなたに問題があるとは思えません。
次に、Python ではコードをモジュールに編成でき、修飾名で参照できるため、os.path.dirname
代わりに使用する必要があります。これが、Python がとのような同じ名前のdirname
関数を持つことができる理由です。ただし、使用したくない場合は、修飾名を使用する必要はありません。たとえば、 の代わりに を使用できます。gzip.open
io.open
from os.path import dirname
import os
dirname
abspath
次に、相対パスがある可能性があるため、 が必要です。これは、実際には PHP とまったく同じです。スクリプトを常に絶対パスで実行する Web ブラウザーのセットアップから PHP を実行することに慣れているだけです。必要に応じて、Python でも同じことができます。
ついに:
Python で動作するはずの提案がありますがdirname(__file__)
、コマンド ライン経由で実行すると空の文字列が返されます。
違います。
$ cat > test.py
print __file___
$ python test.py
test.py
「コマンドライン経由で実行する」が「対話型インタープリターを使用する」ことを意味する場合、もちろん、__file__
ファイルがないため(端末の標準入力を除く)、ファイルはありません。
または、dirname
のような相対パスを出力する場合test.py
は、もちろん、PHP の場合と同様に、常に空の文字列になります。
すべてを一緒に入れて:
$ cat > test.py
from os.path import dirname
print dirname(__file__)
$ python $(abspath test.py)
/Users/abarnert/src/test
PHPのように。