Python執(zhí)行程序獲取所在目錄的解決方案
Python執(zhí)行程序獲取所在目錄
工作需要,寫一個小腳本,其中有個需求是獲取實際的執(zhí)行程序所在路徑(python代碼由pyinstaller
打包成執(zhí)行程序)。沒想到這么一個小要求,淺藏小坑。
方案一
os.path.realpath(os.curdir) os.path.realpath(os.getcwd())
這兩個命令都可以獲取當前命令行的路徑,可是,如果在其它目錄下執(zhí)行程序:
(base) (venv) PS D:\project\pythonProject> .\dist\python.exe
輸出的路徑是命令行當前路徑D:\project\pythonProject
而不是執(zhí)行程序所在路徑D:\project\pythonProject\dist
。
方案二
os.path.realpath(os.path.dirname(__file__))
這個命令獲取有此行代碼的.py
文件位置。直接在pycharm運行調試一切正常。然而,當使用pyinstaller
打包程序執(zhí)行后,路徑變成了如下路徑。
C:\Users\Administartor\AppData\Local\Temp\_MEI313522\
一開始還沒找到文件輸出在哪,一番調查后,可能原因如下:
使用 PyInstaller 打包的可執(zhí)行文件在運行時會解壓出臨時文件。這些臨時文件包含了 Python 腳本、依賴庫和資源文件等。當運行打包后的可執(zhí)行文件時,PyInstaller 會將這些文件解壓到一個臨時目錄中,然后從臨時目錄中執(zhí)行程序。
一般情況下,當程序運行結束后,臨時文件會被自動刪除。這是因為操作系統(tǒng)會在程序退出時清理臨時文件。如果程序異常退出,可能會導致臨時文件沒有被刪除。然而,PyInstaller 在打包時會盡量保證生成的可執(zhí)行文件能夠自動清理臨時文件,以避免產(chǎn)生垃圾文件。
在 Windows 系統(tǒng)中,臨時文件通常存儲在用戶的臨時目錄(例如 C:\Users\<username>\AppData\Local\Temp
)中。在 Linux 和 macOS 等系統(tǒng)中,通常是在 /tmp
目錄中。
OK,破案,一刻也沒有為__file__
的失敗而哀悼,立刻趕來戰(zhàn)場的是sys.argv[0]
方案三
os.path.realpath(os.path.dirname(sys.argv[0]))
完美解決問題。相關資料如下:
sys.argv[0]
表示 Python 腳本或者可執(zhí)行文件的路徑。在運行 Python 腳本時,sys.argv
是一個包含命令行參數(shù)的列表,其中 sys.argv[0]
是腳本本身的路徑。
具體來說,sys.argv[0]
是一個字符串,包含了啟動 Python 解釋器時用于執(zhí)行腳本的可執(zhí)行文件的路徑。它可以用于獲取腳本所在的目錄或用于構建其他路徑。通常情況下,sys.argv[0]
是一個絕對路徑,但在某些情況下也可能是相對路徑。
在使用 pyInstaller
或類似工具將 Python 腳本打包成可執(zhí)行文件時,sys.argv[0]
仍然表示可執(zhí)行文件的路徑,而不是原始 Python 腳本的路徑。
到此這篇關于Python執(zhí)行程序獲取所在目錄的解決方案的文章就介紹到這了,更多相關Python獲取所在目錄內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
利用Python腳本寫端口掃描器socket,python-nmap
這篇文章主要介紹了利用Python腳本寫端口掃描器socket,python-nmap,文章圍繞主題展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07python3對接mysql數(shù)據(jù)庫實例詳解
這篇文章主要介紹了python3對接mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04