"scripts"ディレクトリに存在する実行可能なpythonスクリプトがあります。このスクリプトへのシンボリックリンク(ファイルの起動に使用)がルートディレクトリにあります。ルートディレクトリからシンボリックリンクを介してPythonスクリプトを起動
python build_i
:私は経由して私のスクリプトを実行/起動できるようにしたいと思い
.
├── scripts
│ ├── const.py
│ ├── fops.py
│ ├── i_build.py
│ └── i_Props.ini
└── build_i -> scripts/i_build.py
:ような何か。 i_build.pyスクリプトはi_Props.iniを開き、そこにあるものに基づいていくつかの魔法を試みます。
i_build.pyスクリプトがルートディレクトリのシンボリックリンクを介して起動されると、i_build.pyスクリプトはルートディレクトリ内の他のファイルを探します(i_build.pyは/ scriptsディレクトリではありません)。保存される)。
i_build.pyファイルとして小道具ファイルの場所があります
PROP_FILE = "i_Props.ini"
及びそれを開くために試み、その後失敗。私は明白な理由のためにパスをハードコードしたくありません。
メインファイルにos.getcwd()
を追加したクイックテストでは、CWDがルートディレクトリであると考えていることが確認され、__file__
のチェックではシンボリックリンク( "build_i")と表示されます。
__file__
の名前とCWDのようなシンボリックの宛先をPythonで使用するためにできることはありますか?
他のオペレーティングシステムで使用しているkqueue /を使用してファイルシステムを監視できます。最終的に2つの場所を離れて設定するものは、実行を開始するinodeです。しかし、私が考えることができる唯一の他のものは、ソフトリンクではなくハードリンクであると思うが、それは全く反対の効果があるかもしれないと思っている。私はZ shellにあなたの本物のcwdをargとしてスクリプトに与えることができるプログラムフックを実行する前にそれを持っていると信じています。 – synthesizerpatel
これは答えに値しないので、コメントしています。あなたは 'os.readlink()'を使ってシンボリックリンクを読んで、結果から 'subprocess.Popen()'でスクリプトを実行することができます。ちょっとやっかいですが、何もハードコードされておらず、依存関係は追加されません。 – ThinkChaos
related:[現在実行されているファイルのパスをPythonでどのように取得するのですか?](http://stackoverflow.com/q/2632199/4279) – jfs