13

「scripts」ディレクトリに存在する実行可能なpythonスクリプトがあり、ルートディレクトリにそのスクリプト(ファイルの起動に使用される)へのシンボリックリンクがあります。何かのようなもの:

.
├── scripts
│   ├── const.py
│   ├── fops.py
│   ├── i_build.py
│   └── i_Props.ini
└── build_i -> scripts/i_build.py

次の方法でスクリプトを起動/実行できるようにしたいと思います。

python build_i

ルート ディレクトリから。i_build.py スクリプトは i_Props.ini を開こうとし、そこにあるものに基づいていくつかの魔法を実行します。

問題は、i_build.py スクリプトがルート ディレクトリのシンボリック リンクを介して起動されると、i_build.py スクリプトが他のファイルのルート ディレクトリを検索することです (i_build.py が保存されている /scripts ディレクトリではありません)。

i_build.py ファイルの props ファイルの場所は次のとおりです。

PROP_FILE = "i_Props.ini"

それを開こうとして失敗します。明らかな理由から、パスをハードコーディングしたくありません。

メインファイルに追加する簡単なテストos.getcwd()では、CWD がルートディレクトリであると考えているという私の疑いが確認され、チェックすると、__file__それがシンボリックリンク ("build_i") であることがわかります。

__file__名前やCWDなどのシンボリックの宛先をPythonに使用させるためにできることはありますか?

4

2 に答える 2

20

を使用できます__file__が、実際のパスを取得するにはいくつかの予防策を講じる必要があります。

import os
base_dir = os.path.dirname(os.path.realpath(__file__))

次に、base_dir に関連する他のファイル / リソースをロードします。

some_subdir = 'my_subdir'
some_file = 'my.ini'

ini_path = os.path.join(base_dir, some_subdir, some_file)
于 2013-11-05T22:45:34.593 に答える
2

いくつかの可能性が思い浮かびます。

  1. ルート ディレクトリには、明示的なパスで Python スクリプトを呼び出すシェル ファイルがあります。
  2. それが存在するディレクトリをパスに追加します。
  3. 具体的には、ディレクトリを sys.path に追加します
于 2013-10-28T19:23:49.500 に答える