python獲取程序執(zhí)行文件路徑的方法(推薦)
1.獲取當(dāng)前執(zhí)行主腳本方法:sys.argv[0]和_ file _
(1)sys.argv
一個(gè)傳給Python腳本的指令參數(shù)列表。sys.argv[0]是腳本的名字。一般得到的是相對(duì)路徑,用os.path.abspath(sys.argv[0])得到執(zhí)行文件的絕對(duì)路徑:
dirname, filename = os.path.split(os.path.abspath(sys.argv[0])) os.path.realpath(sys.argv[0])
如果在命令行執(zhí)行sys.argv返回解釋器路徑:[‘/Library/Frameworks/Python.framework/Versions/3.6/bin/ipython3']
(2)_ _ file_ _
獲得當(dāng)前執(zhí)行模塊所在的路徑,一般為相對(duì)路徑,用os.path.abspath(_ _ file_ _)得到執(zhí)行文件的絕對(duì)路徑:
dirname, filename = os.path.split(os.path.abspath( _ _ file_ _)) os.path.realpath(_ _ file_ _)
注意:Python控制臺(tái)下,直接使用print _ _ file _ 是會(huì)導(dǎo)致 name ‘ _ file _ ' is not defined錯(cuò)誤的,因?yàn)檫@時(shí)沒有在任何一個(gè)腳本下執(zhí)行,自然沒有 _ file _ _的定義了。
(3)sys.argv[0]和_ _ file _ _的差異:在主執(zhí)行文件中時(shí),兩者沒什么差異,不過要是在不同的文件下,就不同了,如a.py,b.py這兩個(gè)文件


執(zhí)行a.py結(jié)果如下:

如上圖結(jié)果可以看出:如果都是a.py兩者結(jié)果無異,但是從在a中導(dǎo)入b時(shí)執(zhí)行的sys.argv[0]還是指的是運(yùn)行的主文件:a.py而_ _ file_ _卻輸出的是b.py
2.sys.path
模塊搜索路徑的字符串列表。由環(huán)境變量PYTHONPATH初始化得到。是一個(gè)目錄的列表,sys.path[0]是調(diào)用Python解釋器的當(dāng)前腳本所在的目錄,即主執(zhí)行文件的父級(jí)目錄。
例子:如在/user/ybp/a.py的文件a.py中執(zhí)行:print(sys.path[0])==>/user/ybp,
在命令行執(zhí)行返回空字符串;
3.注意os.path是系統(tǒng)環(huán)境變量,要與上面區(qū)分開來,沒有os.path[0],os.path中的一些方法:
(1)os.path.split(path)
將路徑名稱分成頭和尾一對(duì)。尾部永遠(yuǎn)不會(huì)帶有斜杠。如果輸入的路徑以斜杠結(jié)尾,那么得到的空的尾部。
如果輸入路徑?jīng)]有斜杠,那么頭部位為空。如果輸入路徑為空,那么得到的頭和尾都是空。
https://docs.python.org/2/library/os.path.html#os.path.split
(2)os.path.realpath(path)
返回特定文件名的絕對(duì)路徑,可以在命令行中執(zhí)行。
https://docs.python.org/2/library/os.path.html#os.path.realpath
4.os.getcwd()返回的是當(dāng)前工作路徑,而不一定需要是在腳本里面執(zhí)行,這個(gè)命令相當(dāng)于pwd,可以在命令行中執(zhí)行,返回的是絕對(duì)路徑;
以上這篇python獲取程序執(zhí)行文件路徑的方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)GIF動(dòng)圖以及視頻卡通化詳解
本文主要介紹了如何使用Python中的animegan2-pytorch實(shí)現(xiàn)動(dòng)圖以及視頻的卡通化效果,文中的代碼具有一定的學(xué)習(xí)價(jià)值,需要的朋友可以參考一下2021-12-12
python鏈接sqlite數(shù)據(jù)庫的詳細(xì)代碼實(shí)例
SQLite數(shù)據(jù)庫是一款非常小巧的嵌入式開源數(shù)據(jù)庫軟件,也就是說沒有獨(dú)立的維護(hù)進(jìn)程,所有的維護(hù)都來自于程序本身,它是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低2021-09-09
教你pycharm運(yùn)行Django第一個(gè)項(xiàng)目
本文主要介紹了教你pycharm運(yùn)行Django第一個(gè)項(xiàng)目的實(shí)現(xiàn),文中通過圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)
這篇文章主要介紹了正則給header的冒號(hào)兩邊參數(shù)添加單引號(hào)(Python請(qǐng)求用)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08

