os 模塊代表了程序所在的操作系統(tǒng),主要用于獲取程序運(yùn)行所在操作系統(tǒng)的相關(guān)信息寻咒。
在 Python 的交互式解釋器中先導(dǎo)入 os 模塊仁锯,然后輸入 os.__all__ 命令(__all__ 變量代表了該模塊開放的公開接口)锣杂,即可看到該模塊所包含的全部屬性和函數(shù)。
此處僅介紹 os 模塊中常用的屬性和函數(shù):
os.name:返回導(dǎo)入依賴模塊的操作系統(tǒng)名稱畅厢,通撤肓。可返回 'posix'、'nt'、 'java' 等值其中之一系羞。
os.environ:返回在當(dāng)前系統(tǒng)上所有環(huán)境變量組成的字典郭计。
os.fsencode(filename):該函數(shù)對(duì)類路徑(path-like)的文件名進(jìn)行編碼。
os.fsdecode(filename):該函數(shù)對(duì)類路徑(path-like)的文件名進(jìn)行解碼椒振。
os.PathLike:這是一個(gè)類昭伸,代表一個(gè)類路徑(path-like)對(duì)象。
os.getenv(key, default=None):獲取指定環(huán)境變量的值澎迎。
os.getlogin():返回當(dāng)前系統(tǒng)的登錄用戶名庐杨。與該函數(shù)對(duì)應(yīng)的還有 os.getuid()、os.getgroups()夹供、os.getgid() 等函數(shù)灵份,用于獲取用戶 ID、用戶組哮洽、組 ID 等填渠,這些函數(shù)通常只在 UNIX 系統(tǒng)上有效。
os.getpid():獲取當(dāng)前進(jìn)程 ID鸟辅。
os.getppid():獲取當(dāng)前進(jìn)程的父進(jìn)程 ID氛什。
os.putenv(key, value):該函數(shù)用于設(shè)置環(huán)境變量。
os.cpu_count():返回當(dāng)前系統(tǒng)的 CPU 數(shù)量匪凉。
os.sep:返回路徑分隔符枪眉。
os.pathsep:返回當(dāng)前系統(tǒng)上多條路徑之間的分隔符。一般在 Windows 系統(tǒng)上多條路徑之間的分隔符是英文分號(hào)(;)再层;在 UNIX 及類 UNIX 系統(tǒng)(如 Linux贸铜、Mac os X)上多條路徑之間的分隔符是英文冒號(hào)(:)。
os.linesep:返回當(dāng)前系統(tǒng)的換行符聂受。一般在 Windows 系統(tǒng)上換行符是“\r\n”:在 UNIX 系統(tǒng)上換行符是“\n”蒿秦;在 Mac os X 系統(tǒng)上換行符是“\r”。
os.urandom(size):返回適合作為加密使用的饺饭、最多由 N 個(gè)字節(jié)組成的 bytes 對(duì)象渤早。該函數(shù)通過操作系統(tǒng)特定的隨機(jī)性來源返回隨機(jī)字節(jié)职车,該隨機(jī)字節(jié)通常是不可預(yù)測(cè)的瘫俊,因此適用于絕大部分加密場(chǎng)景。
下面程序示范了 os 模塊的大部分函數(shù)的用法:
import?os
#?顯示導(dǎo)入依賴模塊的操作系統(tǒng)的名稱
print(os.name)
#?獲取PYTHONPATH環(huán)境變量的值
print(os.getenv('PYTHONPATH'))
#?返回當(dāng)前系統(tǒng)的登錄用戶名
print(os.getlogin())
#?獲取當(dāng)前進(jìn)程ID
print(os.getpid())
#?獲取當(dāng)前進(jìn)程的父進(jìn)程ID
print(os.getppid())
#?返回當(dāng)前系統(tǒng)的CPU數(shù)量
print(os.cpu_count())
#?返回路徑分隔符
print(os.sep)
#?返回當(dāng)前系統(tǒng)的路徑分隔符
print(os.pathsep)
#?返回當(dāng)前系統(tǒng)的換行符
print(os.linesep)
#?返回適合作為加密使用的悴灵、最多3個(gè)字節(jié)組成的bytes
print(os.urandom(3))
運(yùn)行上面程序扛芽,可以看到如下輸出結(jié)果:
nt
None
yeeku
9904
12036
8
\
;
b'\x12\x1e\xcf'
從上面的輸出結(jié)果可以看出,在 Windows 系統(tǒng)上 Python 導(dǎo)入依賴模塊的操作系統(tǒng)名稱為“nt”积瞒;當(dāng)前系統(tǒng)的登錄用戶名是“yeeku”:當(dāng)前進(jìn)程 ID 為“9904”川尖;當(dāng)前進(jìn)程的父進(jìn)程 ID 為“12036”;當(dāng)前系統(tǒng)上有 8 個(gè) CPU茫孔;當(dāng)前系統(tǒng)(Windows)的路徑分隔符是“\”叮喳;當(dāng)前系統(tǒng)(Windows)上多條路徑之間的分隔符是分號(hào)(;)被芳;但在當(dāng)前系統(tǒng)(Windows)上換行符不能明顯看到,這是因?yàn)楫?dāng)在控制臺(tái)輸出“\r\n” 時(shí)才會(huì)產(chǎn)生兩個(gè)空行馍悟。
此外畔濒,在 os 模塊下還包含大量操作文件和目錄的功能函數(shù),本教程將會(huì)在后續(xù)章節(jié)專門介紹這些功能函數(shù)锣咒。
在 os 模塊下還包含各種進(jìn)程管理函數(shù)侵状,它們可用于啟動(dòng)新進(jìn)程、中止己有進(jìn)程等毅整。在 os 模塊下與進(jìn)程管理相關(guān)的函數(shù)如下:
os.abort():生成一個(gè) SIGABRT 信號(hào)給當(dāng)前進(jìn)程趣兄。在 UNIX 系統(tǒng)上,默認(rèn)行為是生成內(nèi)核轉(zhuǎn)儲(chǔ)悼嫉;在 Windows 系統(tǒng)上艇潭,進(jìn)程立即返回退出代碼 3。
os.execl(path, arg0, arg1, ...):該函數(shù)還有一系列功能類似的函數(shù)戏蔑,比如 os.execle()暴区、os.execlp() 等,這些函數(shù)都是使用參數(shù)列表 arg0, arg1,...來執(zhí)行 path 所代表的執(zhí)行文件的辛臊。
os.forkpty():fork一個(gè)子進(jìn)程仙粱。
os.kill(pid, sig):將 sig 信號(hào)發(fā)送到 pid 對(duì)應(yīng)的過程,用于結(jié)束該進(jìn)程彻舰。
os.killpg(pgid, sig):將 sig 信號(hào)發(fā)送到 pgid 對(duì)應(yīng)的進(jìn)程組伐割。
os.popen(cmd, mode='r', buffering=-1):用于向 cmd 命令打開讀寫管道(當(dāng) mode 為 r 時(shí)為只讀管道,當(dāng) mode 為 rw 時(shí)為讀寫管道)刃唤,buffering 緩沖參數(shù)與內(nèi)置的 open() 函數(shù)有相同的含義隔心。該函數(shù)返回的文件對(duì)象用于讀寫字符串,而不是字節(jié)尚胞。
os.spawnl(mode, path, ...):該函數(shù)還有一系列功能類似的函數(shù)硬霍,比如 os.spawnle()、os.spawnlp() 等笼裳,這些函數(shù)都用于在新進(jìn)程中執(zhí)行新程序唯卖。
os.startfile(path[,operation]):對(duì)指定文件使用該文件關(guān)聯(lián)的工具執(zhí)行 operation 對(duì)應(yīng)的操作。如果不指定 operation 操作躬柬,則默認(rèn)執(zhí)行打開(open)操作拜轨。operation 參數(shù)必須是有效的命令行操作項(xiàng)目,比如 open(打開)允青、edit(編輯)橄碾、print(打印)等。
os.system(command):運(yùn)行操作系統(tǒng)上的指定命令法牲。
下面程序示范了在 os 模塊中與進(jìn)程管理相關(guān)的函數(shù)的功能:
import?os
#?運(yùn)行平臺(tái)上的cmd命令
os.system('cmd')
#?使用Excel打開g:\abc.xls文件
os.startfile('g:\\abc.xls')
os.spawnl(os.P_NOWAIT,?'E:\\Tools\\編輯工具\(yùn)\Notepad++.7.5.6.bin.x64\\notepad++.exe',?'?')
#?使用python命令執(zhí)行os_test.py程序
os.execl("D:\\Python\\Python36\\python.exe",?"?",?'os_test.py',?'i')
如果直接運(yùn)行上面程序史汗,可以看到程序運(yùn)行后使用 Excel 打開了 abe.xls 文件,也打開了 Notepad++ 工具拒垃,還使用 python 命令運(yùn)行了 os_test.py 文件淹办。但如果將程序中粗體字代碼取消注釋,將看到程序運(yùn)行后只是啟動(dòng)了 cmd 命令行程序恶复,這是因?yàn)槭褂?as.system() 函數(shù)來運(yùn)行程序時(shí)怜森,新程序所在的進(jìn)程會(huì)替代原有的進(jìn)程。