[Python] 在 Python 程式中,取用呼叫自己的 Python 執行檔路徑

[Python] 在 Python 程式中,取用呼叫自己的 Python 執行檔路徑

最近專案遇到一個奇怪的問題…

我們的 python 程式平常是用 Python 2.7 在跑的,

但舊版的程式是在 Python 2.6 上跑的。

 

假設現在系統預設的 python 是 2.7,但我們特別用 python 2.6 來執行舊程式,

作法可能是像 /usr/bin/python2.6 test.py 這樣。

上面的作法看起來沒什麼問題,但是 test.py 裡面有下面這一行,就出錯了:

import subprocess
subprocess.call("python another.py", shell=True)

 

原本預期用 /usr/bin/python2.6 執行了 test.py,

也用 /usr/bin/python2.6 來執行 another.py,

但是程式裡寫的 “python” 會叫到 $PATH 環境變數裡最早遇到的 python,

也就是系統預設的 /usr/bin/python (2.7),

導致舊程式 test.py 本身是用 python 2.6 執行,

它呼叫的 another.py 卻用 python 2.7 執行的怪現象…

 

解決的方法就是不要寫死 “python” 這個字,

改用 sys.executable,就能取得執行目前程式的 python 路徑了:

import subprocess
subprocess.call("%s another.py" % (sys.executable), shell=True)

 

參考資料:stackoverflow: get path of python binary that’s executing the script

(本頁面已被瀏覽過 4,156 次)

2 thoughts on “[Python] 在 Python 程式中,取用呼叫自己的 Python 執行檔路徑

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料