[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 執行檔路徑”
最近剛好碰到這個問題 太感謝了
不客氣呀^^