ホームページ >バックエンド開発 >Python チュートリアル >Python で実行ファイルのパスを確実に特定するにはどうすればよいですか?

Python で実行ファイルのパスを確実に特定するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-25 09:14:29971ブラウズ

How Can You Reliably Determine the Execution File's Path in Python?

Python での実行ファイルのパスの決定

はじめに

現在実行中の Python スクリプトへのパスを特定することは、さまざまなアプリケーションにとって重要な側面です。ただし、さまざまなシナリオで機能する「普遍的な」アプローチを見つけるのは困難な場合があります。この記事では、いくつかの方法を検討し、それらに関連する制限に対処し、最終的には包括的な解決策を提示します。

従来の方法の制限

  • path = os.path.abspath(os. path.dirname(sys.argv[0])): execfile.
  • path = などのメソッドを介して、別のディレクトリにある別のスクリプトからスクリプトが実行される場合、このアプローチは失敗します。 os.path.abspath(os.path.dirname(__file__)): このメソッドは、

    • file 属性が存在しない場合には機能しない可能性があります (例: 、Py2exe 実行)
    • コードは、execute() を使用して IDLE から実行されます
    • ファイル が定義されていません (例: Mac OS X v10.6)

包括的なソリューション

実行コンテキストに関係なく、現在実行中のファイルのパスを取得するには、inspect モジュールと os モジュールの関数を組み合わせて使用​​できます。

from inspect import getsourcefile
from os.path import abspath

path = abspath(getsourcefile(lambda:0))

このソリューションは、次のようなさまざまなシナリオでソース ファイル パスを取得する一貫したアプローチを提供します。

  • メイン スクリプトの直接実行
  • 別のスクリプトからの実行
  • 関数内での実行
  • インタプリタ内での実行 (IDLE など)

テスト例

次のディレクトリ構造を考慮します:

C:.
|   a.py
\---subdir
        b.py

a.py 内のコード:

#! /usr/bin/env python
import os, sys

print "a.py: os.getcwd()=", os.getcwd()
print

execfile("subdir/b.py")

subdir/b.py 内のコード:

#! /usr/bin/env python
import os, sys

print "b.py: os.getcwd()=", os.getcwd()
print

Python a.py の出力は次のとおりです。 :

a.py: os.getcwd()= C:\
b.py: os.getcwd()= C:\zzz

これは、os.getcwd() が実行コンテキストの作業ディレクトリを反映していることを示しています。これは、実行されているスクリプトの場所とは異なる場合があります。対照的に、提案された解決策 (abspath(getsourcefile(lambda:0))) は、実行コンテキストに関係なく、一貫してスクリプトのソース ファイル パスを生成します。

以上がPython で実行ファイルのパスを確実に特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。