私の質問は、なぜファイル名を取得するためにこのコードをすべて書かなければならないのかということです:
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
一つ一つ見ていきましょう。
まず、printは PHP の よりも 1 文字長いですecho。あなたに問題があるとは思えません。
次に、Python ではコードをモジュールに編成でき、修飾名で参照できるため、os.path.dirname代わりに使用する必要があります。これが、Python がとのような同じ名前のdirname関数を持つことができる理由です。ただし、使用したくない場合は、修飾名を使用する必要はありません。たとえば、 の代わりに を使用できます。gzip.openio.openfrom os.path import dirnameimport osdirname
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のように。