大師兄的Python學(xué)習(xí)筆記(四): Python的內(nèi)置函數(shù)
大師兄的Python學(xué)習(xí)筆記(六): 常用庫之sys包
一、關(guān)于os包
- os包在Python標(biāo)準(zhǔn)庫中,在安裝Python時(shí)會(huì)默認(rèn)安裝。
- os包通常用于處理系統(tǒng)相關(guān)的操作朽们。
- 為了避免方法重名娄周,我們通常用
import os
語句導(dǎo)入os包,而不是from os import *
。- 通過os包可以實(shí)現(xiàn)跨平臺(tái)操作福扬。
- os.path模塊主要用于文件屬性操作(配合shutil模塊)。
- 部分模塊需要在Unix系統(tǒng)或iPython下使用惜犀。比如:os.fork, os.execv 和 os.spawn模塊等等铛碑。
- 本文所有的案例默認(rèn)已經(jīng)
import os
。
二虽界、OS的相關(guān)方法
1. 當(dāng)前進(jìn)程和系統(tǒng)信息的相關(guān)方法
1)os.name
- 獲得當(dāng)前操作系統(tǒng)信息汽烦。
- 只會(huì)返回三個(gè)值,分別是posix , nt , java
- 分別對(duì)應(yīng)Uinx系統(tǒng)(Linux和Mac系統(tǒng)都算)莉御,Windows系統(tǒng)或Java虛擬機(jī)撇吞。
>>>import os >>>os.name 'posix'
2)os.ctermid()
- 返回與進(jìn)程控制終端對(duì)應(yīng)的文件名,近在Unix中有效。
>>>os.ctermid() '/dev/tty'
3)os.environ
- 用于獲得系統(tǒng)信息礁叔。
- 返回類似dict的對(duì)象牍颈,可以用key查找value。
- 部分key如下:
Windows系統(tǒng): os.environ['HOMEPATH']:當(dāng)前用戶主目錄琅关。 os.environ['TEMP']:臨時(shí)目錄路徑煮岁。 os.environ[PATHEXT']:可執(zhí)行文件。 os.environ['SYSTEMROOT']:系統(tǒng)主目錄涣易。 os.environ['LOGONSERVER']:機(jī)器名画机。 os.environ['PROMPT']:設(shè)置提示符。 Unix系統(tǒng): os.environ['HOME']:獲得當(dāng)前用戶的主目錄新症。 os.environ['USER']:當(dāng)前使用用戶步氏。 os.environ['LC_COLLATE']:路徑擴(kuò)展的結(jié)果排序時(shí)的字母順序。 os.environ['SHELL']:使用shell的類型徒爹。 os.environ['LAN']:使用的語言荚醒。 os.environ['SSH_AUTH_SOCK']:ssh的執(zhí)行路徑芋类。
>>>os.environ['HOME'] '/root'
4)os.environb
- 與os.environ相同,但返回的是字節(jié)界阁。
- 只有在 os.supports_bytes_environ為True的時(shí)候 environb才是可用的(Windows不可用)梗肝。
>>>os.supports_bytes_environ True >>>os.environb[b'HOME'] # 參數(shù)也是字節(jié)。 b'/home/ubuntu'
5)os.getcwd()
- 獲得當(dāng)前Python的工作目錄铺董。
>>>os.getcwd() '/home/ubuntu'
6)os.chdir()
- 改變當(dāng)前工作目錄到指定的路徑巫击。
>>>path = os.path.join('d:','\python3.7') # 制作了一個(gè)路徑字符串 >>>os.chdir(path) >>>os.getcwd() 'd:\\python3.7'
7)os.fchdir(<fd>)
- 在Windows下不能使用。
- 將當(dāng)前工作目錄改變?yōu)橐粋€(gè)文件描述符<fd>表示的目錄精续。
- 文件描述符必須指向一個(gè)打開的目錄坝锰。
>>>path = '/home/ubuntu/sim-commu_pyServer' # 制作一個(gè)目錄字符串 >>>file = os.open( path, os.O_RDONLY ) # 打開一個(gè)目錄 >>>os.fchdir(file) >>>os.getcwd() '/home/ubuntu/sim-commu_pyServer'
8)os.fsencode(<filename>)
- 將文件路徑轉(zhuǎn)碼成二進(jìn)制。
- 用于確保不同系統(tǒng)間的地址能夠被正確編碼重付。
- 與os.fsdecode互逆顷级。
>>>path = os.path.join('d:','\\test.txt') >>>os.fsencode(path) b'd:\\test.txt'
9)os.fsdecode(b<filename>)
- 將二進(jìn)制文件路徑轉(zhuǎn)碼成字符串。
- 用于確保不同系統(tǒng)間的地址能夠被正確解碼确垫。
- 與os.fsencode互逆弓颈。
>>>path = os.path.join('d:','\\test.txt') >>>pathb = os.fsencode(path) >>>os.fsdecode(pathb) 'd:\\test.txt'
10)os.fspath(<path>)
- 如果<path>是str或bytes路徑對(duì)象,則返回<path>删掀。
- 否則將拋出異常翔冀。
>>>path = os.path.join('d:','\\test.txt') >>>os.fspath(path) '\\test.txt' >>>i = 1 >>>os.fspath(i) # 會(huì)拋出TypeError TypeError Traceback (most recent call last) <ipython-input-44-12fb45f2d64f> in <module> 1 i = 1 ----> 2 os.fspath(i) TypeError: expected str, bytes or os.PathLike object, not int
11)class os.PathLike
- 代表一個(gè)類路徑忘衍。
- 可以返回str或bytes蚁署。
>>>import os >>>class pathlike: >>> def __init__(self, path): >>> self.path = path >>> def __fspath__(self): >>> return self.path >>>if __name__ == "__main__": >>> _path = pathlike(r'd:\test.txt') >>> print(os.fspath(_path)) 'd:\test.txt'
12)os.getenv(<key>, <default=None>)
- 獲得一個(gè)系統(tǒng)環(huán)境變量值。
- 與os.environ()類似睡蟋,不過如果環(huán)境變量不存在不會(huì)報(bào)錯(cuò)款票,而是返回None控硼。
>>>import os >>>os.getenv('PATH') '/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'
13)os.getenvb(b<key>, <default=None>)
- 與os.getenv相同,但是返回的是byte值艾少。
- 在Windows下不可用卡乾。
>>>os.getenvb(b'PATH') # 輸入的是bytes,返回的也是bytes b'/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'
14)os.get_exec_path(<env=None>)
- 獲得環(huán)境變量PATH中所有的可執(zhí)行文件缚够。
>>>os.get_exec_path() ['/home/ubuntu/bin', '/home/ubuntu/.local/bin', '/home/ubuntu/anaconda3/condabin', >'/home/ubuntu/anaconda3/bin', '/home/ubuntu/anaconda3/bin', '/usr/local/sbin', '/usr/local/bin', '/usr/sbin', >'/usr/bin', '/sbin', '/bin', '/usr/games', '/usr/local/games', '/snap/bin']
15)os.getegid()
- 獲得Unix系統(tǒng)中當(dāng)前有效用戶組的ID幔妨。
- 在Unix系統(tǒng)中可用。
>>>os.getegid() 500
16)os.geteuid()
- 獲得Unix系統(tǒng)中當(dāng)前有效用戶的ID潮瓶。
- 在Unix系統(tǒng)中可用陶冷。
>>>os.geteuid() 500
17)os.getgid()
- 獲得Unix系統(tǒng)中當(dāng)前實(shí)際用戶組的ID。
- 在Unix系統(tǒng)中可用毯辅。
>>>os.getgid() 500
18)os.getgrouplist(<user>, <group>)
- 返回<user>所屬的所有組列表。
- 在Unix系統(tǒng)中可用煞额。
>>>os.getgrouplist(root,100) # 查看root用戶屬于哪些組思恐。 [100]
19)os.getgroups()
- 返回當(dāng)前進(jìn)程對(duì)應(yīng)的組ID列表沾谜。
- 在Unix系統(tǒng)中可用。
>>>os.getgroups() [4, 24, 27, 30, 46, 115, 116, 500]
20)os.getlogin()
- 獲取當(dāng)前登錄的用戶胀莹。
>>>os.getlogin() 'xiaor'
21)os.getpgid(<pid>)
- 返回<pid>的進(jìn)程組ID列表基跑。
- 在Unix系統(tǒng)中可用。
>>>os.getpgid(29475) 29475
22)os.getpgrp()
- 返回當(dāng)時(shí)進(jìn)程組ID描焰。(命令調(diào)用時(shí)的)
- 在Unix系統(tǒng)中可用媳否。
>>>os.getpgrp() 29475
23)os.getpid()
- 返回當(dāng)前進(jìn)程ID。(現(xiàn)在的)
>>>os.getpid() 29475
24)os.getppid()
- 返回父進(jìn)程ID荆秦。
>>>os.getppid() 24866
25)os.getpriority(<which>, <who>)
- 獲取程序調(diào)度優(yōu)先級(jí)篱竭。
- <which> 參數(shù)值可以是 os.PRIO_PROCESS,os.PRIO_PGRP或os.PRIO_USER步绸。
- <who> 是相對(duì)于 which 的進(jìn)程標(biāo)識(shí)符掺逼。
- 在Unix系統(tǒng)中可用。
>>>os.getpriority(os.PRIO_PROCESS, os.getpid()) 0
26)os.getresuid()
- 返回一個(gè)由 (ruid, euid, suid) 所組成的元組瓤介,分別表示當(dāng)前進(jìn)程的真實(shí)用戶ID吕喘,有效用戶ID和甲暫存用戶ID。
- 只能在Unix系統(tǒng)使用刑桑。
>>>os.getresuid() (500, 500, 500)
27)os.getresgid()
- 返回一個(gè)由 (rgid, egid, sgid) 所組成的元組氯质,分別表示當(dāng)前進(jìn)程的真實(shí)組ID,有效組ID和暫存組ID祠斧。
- 只能在Unix系統(tǒng)使用病梢。
>>>os.getresgid() (500, 500, 500)
28)os.getuid()
- 返回當(dāng)前進(jìn)程的真實(shí)用戶ID。
- 只能在Unix系統(tǒng)使用梁肿。
>>>os.getuid() 500
29)os.initgroups(<username>, <gid>)
- 初始化進(jìn)程組的權(quán)限蜓陌。
- 只能在Unix系統(tǒng)使用。
>>>os.initgroups('ubuntu',500)
30)os.putenv(<key>, <value>)
- 在當(dāng)前shell中改變環(huán)境變量的值吩蔑。
- 不會(huì)真正改變os.environ中的值钮热。
>>>os.putenv('PATH','/usr') # 只是在shell中改變 >>>os.environ['PATH'] # 環(huán)境變量中并沒有真正被改變 '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin'
31)os.setegid(<egid>)
- 設(shè)置當(dāng)前進(jìn)程的有效組ID。
- 只能在Unix系統(tǒng)使用烛芬。
>>>os.getegid() 0 >>>os.setegid(10) >>>os.getegid() 10
32)os.seteuid(<euid>)
- 設(shè)置當(dāng)前進(jìn)程的有效用戶ID隧期。
- 只能在Unix系統(tǒng)使用。
>>>os.geteuid() 0 >>>os.seteuid(10) >>>os.geteuid() 10
33)os.setgid(<gid>)
- 設(shè)置當(dāng)前進(jìn)程的組ID赘娄。
- 只能在Unix系統(tǒng)使用仆潮。
>>>os.getegid() 0 >>>os.setegid(10) >>>os.getegid() 10
34)os.setgroups(<groups>)
- 設(shè)置當(dāng)前進(jìn)程支持的groups id列表。
- 需要Unix系統(tǒng)的超級(jí)管理員使用遣臼。
>>>os.setgroups([])
35)os.setpgrp()
- 調(diào)用系統(tǒng)中的setpgrp()或setpgrp(0, 0)創(chuàng)建新進(jìn)程性置。
- 只能在Unix系統(tǒng)使用。
>>>os.setpgrp()
36)os.setpgid(<pid>, <pgrp>)
- 調(diào)用系統(tǒng)中的 setpgid()揍堰,將 pid 對(duì)應(yīng)進(jìn)程的組ID設(shè)置為 pgrp鹏浅。
- 只能在Unix系統(tǒng)使用嗅义。
>>>os.setpgid(0,6215) >>>os.getpgid(0) 6215
37)os.setpriority(<which>, <who>, <priority>)
- 設(shè)置程序調(diào)度優(yōu)先級(jí)。
- which的值為os.PRIO_PROCESS隐砸,os.PRIO_PGRP或os.PRIO_USER之一之碗。
- who會(huì)相對(duì)于 which被解析。
- priority 是范圍在 -20 至 19 的值季希。 默認(rèn)優(yōu)先級(jí)為 0褪那;較小的優(yōu)先級(jí)數(shù)值會(huì)更優(yōu)先被調(diào)度。
>>>os.getpriority(os.PRIO_PROCESS, os.getpid())
38)os.setregid(<rgid>, <egid>)
- 設(shè)置當(dāng)前進(jìn)程的真實(shí)和有效組ID式塌。
- 只能在Unix系統(tǒng)使用博敬。
>>>import os >>>os.setregid(501,501) >>>os.getegid() 501 >>>os.getgid() 501
39)os.setresgid(<rgid>, <egid>, <sgid>)
- 設(shè)置當(dāng)前進(jìn)程的真實(shí),有效和暫存組ID珊搀。
- 只能在Unix系統(tǒng)使用冶忱。
>>>os.setresgid(502,502,502) >>>os.getresgid() (502, 502, 502)
40)os.setresuid(<ruid>, <euid>, <suid>)
- 設(shè)置當(dāng)前進(jìn)程的真實(shí),有效和暫存用戶ID境析。
- 只能在Unix系統(tǒng)使用囚枪。
>>>os.setresuid(101, 101, 101) >>>os.getresuid() (101, 101, 101)
41)os.setreuid(<ruid>, <euid>)
- 設(shè)置當(dāng)前進(jìn)程的真實(shí)和有效用戶ID。
- 只能在Unix系統(tǒng)使用劳淆。
>>>os.setreuid(101, 101) >>>os.getresuid() (101, 101, 101)
42)os.getsid(<pid>)
- 獲取當(dāng)前會(huì)話链沼。
- 只能在Unix系統(tǒng)使用。
>>>os.getsid(0) 25306
43)os.setsid()
- 建立新的會(huì)話沛鸵。
- 只能在Unix系統(tǒng)使用括勺。
>>>os.setsid()
44)os.setuid(<uid>)
- 設(shè)置當(dāng)前進(jìn)程的用戶ID。
- 只能在Unix系統(tǒng)使用曲掰。
>>>os.setuid(102) >>>os.getuid() 102
45)os.strerror(<code>)
- 通過Linux系統(tǒng)錯(cuò)誤碼獲取錯(cuò)誤信息疾捍。
- 只能在Unix系統(tǒng)使用。
>>>code=1 >>>error = os.strerror(code) >>>print(code,error) (1, 'Operation not permitted')
46)os.supports_bytes_environ
- 判斷操作系統(tǒng)上原生環(huán)境類型是字節(jié)型栏妖。
>>>os.supports_bytes_environ # 在windows下 False
47)os.umask(<mask>)
- 設(shè)定當(dāng)前權(quán)限掩碼并返回之前的權(quán)限掩碼乱豆。
>>>os.umask(24) 18
48)os.uname()
- 返回當(dāng)前操作系統(tǒng)的識(shí)別信息。
- 返回值是一個(gè)有5個(gè)屬性的對(duì)象吊趾。
- sysname - 操作系統(tǒng)名
- nodename - 機(jī)器在網(wǎng)絡(luò)上的名稱(需要先設(shè)定)
- release - 操作系統(tǒng)發(fā)行信息
- version - 操作系統(tǒng)版本信息
- machine - 硬件標(biāo)識(shí)符
- 只能在Unix系統(tǒng)使用宛裕。
>>>os.uname() ('Linux', 'VM-0-4-ubuntu', '4.4.0-130-generic', '#156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018', 'x86_64')
49)os.unsetenv(<key>)
- 用來刪除一個(gè)環(huán)境變量 。
- 不會(huì)更新os.environ论泛。
- 只能在Unix系統(tǒng)使用揩尸。
>>>os.environ['TERM'] 'linux' >>>os.unsetenv('TERM') >>>os.environ['TERM'] 'linux'
2. 文件描述符操作
- 文件描述符(file descriptor)是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引。
- 文件描述符其是一個(gè)非負(fù)整數(shù)(通常是小整數(shù))屁奏,用于指向被打開的文件岩榆。
- 所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符。
- 程序剛剛啟動(dòng)的時(shí)候,0是標(biāo)準(zhǔn)輸入朗恳,1是標(biāo)準(zhǔn)輸出湿颅,2是標(biāo)準(zhǔn)錯(cuò)誤载绿。
- 如果此時(shí)去打開一個(gè)新的文件粥诫,它的文件描述符會(huì)是3。
50)os.fdopen(<fd>, <*args>, <**kwargs>)
- 打開一個(gè)文件描述符崭庸。
- 創(chuàng)建并返回一個(gè)文件對(duì)象怀浆。
- 文件描述符可以傳遞給其它低級(jí)函數(shù)。
- 通常用于依賴操作系統(tǒng)的API代碼怕享。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) # 打開文件描述符 >>>file_obj = os.fdopen(file,'w') # 創(chuàng)建文件對(duì)象 >>>file_obj.write('Hello World!') # 寫入內(nèi)容 >>>os.lseek(file, 0, 0) # 讀取內(nèi)容 >>>content = os.read(file,100) >>>print(content) b'Hello World!Hello World!'
51)os.close(<fd>)
- 關(guān)閉文件描述符执赡。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.close(file)
52)os.closerange(<fd_low>, <fd_high>)
- 從低到高關(guān)閉全部文件描述符。
>>>file1 = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>file2 = os.open( "test2.txt", os.O_RDWR|os.O_CREAT ) >>>file3 = os.open( "test3.txt", os.O_RDWR|os.O_CREAT ) >>>fd_low = min(file1,file2,file3) # 獲取最低的描述符 >>>fd_high = max(file1,file2,file3) # 獲取最高的描述符 >>>os.closerange(fd_low,fd_high)
53)os.copy_file_range(<src>, <dst>, <count>, <offset_src=None>, <offset_dst=None>)
- 從文件描述符<src>復(fù)制<count>字節(jié)函筋。
- 從偏移量<offset_src>開始讀取沙合,到文件描述符<dst>,從偏移量<offset_dst>開始寫入跌帐。
>>>file1 = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) # 讀取描述符 >>>file2 = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) # 目標(biāo)描述符 >>>file_obj = os.fdopen(file1,'w') >>>file_obj.write('Hello World!') >>>os.copy_file_range(file1, file2, 10, 1)
54)os.device_encoding(<fd>)
- 如果連接到終端首懈,則返回一個(gè)與 fd 關(guān)聯(lián)的編碼字符串。
- 否則返回 None谨敛。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>print(os.device_encoding(file)) UTF-8
55)os.dup(<fd>)
- 用于復(fù)制文件描述符 fd究履。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>file_obj = os.fdopen(file,'w') >>>file_obj.write('Hello World!') >>>os.lseek(file, 0, 0) >>>file_copy = os.dup(file) >>>os.read(file_copy,100) b'Hello World!'
56)os.dup2(<fd>, <fd2>, <inheritable=True>)
- 把文件描述符 <fd> 復(fù)制為 <fd2>。
- 必須要先關(guān)閉后者脸狸。
>>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>file_dup = os.open( "test2.txt", os.O_RDWR|os.O_CREAT ) >>>file_obj = os.fdopen(file,'w') >>>file_obj.write('Hello World!') >>>os.lseek(file, 0, 0) >>>os.dup2(file,file_dup) >>>os.read(file_dup,100) b'Hello World!'
57)os.fchmod(<fd>, <mode>)
- 將 fd 指定文件的權(quán)限狀態(tài)修改為 mode最仑。
- 與os.chmod()相同。
- mode可以是一下一個(gè)或多個(gè)組成炊甲,用|隔開:
指令 作用 - stat.S_ISUID 設(shè)置 UID 位 - stat.S_ISGID 設(shè)置組 ID 位 - stat.S_ENFMT 系統(tǒng)文件鎖定的執(zhí)法行動(dòng) - stat.S_ISVTX 在執(zhí)行之后保存文字和圖片 - stat.S_IREAD 對(duì)于擁有者讀的權(quán)限 - stat.S_IWRITE 對(duì)于擁有者寫的權(quán)限 - stat.S_IEXEC 對(duì)于擁有者執(zhí)行的權(quán)限 - stat.S_IRWXU 對(duì)于擁有者讀泥彤、寫、執(zhí)行的權(quán)限 - stat.S_IRUSR 對(duì)于擁有者讀的權(quán)限 - stat.S_IWUSR 對(duì)于擁有者寫的權(quán)限 - stat.S_IXUSR 對(duì)于擁有者執(zhí)行的權(quán)限 - stat.S_IRWXG 對(duì)于同組的人讀寫執(zhí)行的權(quán)限 - stat.S_IRGRP 對(duì)于同組讀的權(quán)限 - stat.S_IWGRP 對(duì)于同組寫的權(quán)限 - stat.S_IXGRP 對(duì)于同組執(zhí)行的權(quán)限 - stat.S_IRWXO 對(duì)于其他組讀寫執(zhí)行的權(quán)限 - stat.S_IROTH 對(duì)于其他組讀的權(quán)限 - stat.S_IWOTH 對(duì)于其他組寫的權(quán)限 - stat.S_IXOTH 對(duì)于其他組執(zhí)行的權(quán)限
- 只能在Unix系統(tǒng)使用卿啡。
>>>import os,stat >>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>os.fchmod( file, stat.S_IXGRP)
58)os.fchown(<fd>, <uid>, <gid>)
- 修改文件所有權(quán)的uid(用戶id) 和 gid(用戶組id)吟吝。
- 若不想變更其中的某個(gè) ID,可將相應(yīng)值設(shè)為 -1牵囤。
- 與os.chown()相同爸黄。
- 只能在Unix系統(tǒng)使用。
>>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>os.fchown(file,101,24)
59)os.fdatasync(<fd>)
- 強(qiáng)制將文件描述符 fd 指定文件寫入磁盤揭鳞。不強(qiáng)制更新元數(shù)據(jù)炕贵。
- 只能在Unix系統(tǒng)使用。
>>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,'Hello World!') >>>os.fdatasync(file) >>>os.lseek(file,0,0) >>>os.read(file,100) >>>os.read(file,100) 'Hello World!'
60)os.fpathconf(<fd>, <name>)
- 返回一個(gè)打開的文件的系統(tǒng)配置信息野崇。
- 與os.pathconf()相同称开。
- <name>包括:
序號(hào) 指令 0 'PC_LINK_MAX' 1 'PC_MAX_CANON' 2 'PC_MAX_INPUT' 3 'PC_NAME_MAX' 4 'PC_PATH_MAX' 5 'PC_PIPE_BUF' 6 'PC_CHOWN_RESTRICTED' 7 'PC_NO_TRUNC' 8 'PC_VDISABLE' 9 'PC_SYNC_IO' 10 'PC_ASYNC_IO' 11 'PC_PRIO_IO' 12 'PC_SOCK_MAXBUF' 13 'PC_FILESIZEBITS'
- 只能在Unix系統(tǒng)使用。
>>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>patchconf = os.fpathconf(file,'PC_NAME_MAX') >>>print(patchconf) 255
61)os.fstat(<fd>)
- 獲取文件描述符 fd 的狀態(tài). 返回一個(gè)stat_result對(duì)象。
- 與os.stat()相同鳖轰。
>> file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>os.fstat(file) posix.stat_result(st_mode=32776, st_ino=344345, st_dev=64769, st_nlink=1, st_uid=101, st_gid=24, st_size=12, st_atime=1574863732, st_mtime=1574864730, st_ctime=1574864730)
62)os.fstatvfs(<fd>)
- 用于返回包含文件描述符fd的文件的文件系統(tǒng)的信息清酥。
- 與statvfs()指令類似。
- 返回內(nèi)容解構(gòu):
指令 功能 f_bsize 文件系統(tǒng)塊大小 f_frsize 分棧大小 f_blocks 文件系統(tǒng)數(shù)據(jù)塊總數(shù) f_bfree 可用塊數(shù) f_bavail 非超級(jí)用戶可獲取的塊數(shù) f_files 文件結(jié)點(diǎn)總數(shù) f_ffree 可用文件結(jié)點(diǎn)數(shù) f_favail 非超級(jí)用戶的可用文件結(jié)點(diǎn)數(shù) f_fsid 文件系統(tǒng)標(biāo)識(shí) ID f_flag 掛載標(biāo)記 f_namemax 最大文件長度
- 只能在Unix系統(tǒng)使用蕴侣。
>>>file = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>os.fstatvfs(file) posix.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=12868511, f_bfree=11213422, f_bavail=10553980, f_files=3276800, f_ffree=3099984, f_favail=3099984, f_flag=1024, f_namemax=255)
63)os.fsync(<fd>)
- 強(qiáng)制將文件描述符為<fd>的文件寫入硬盤焰轻。
>>>import os >>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b"test") >>>os.fsync(file) # 這里強(qiáng)制寫入硬盤 >>>os.lseek(file, 0, 0) >>>print(os.read(file, 100)) b'test'
64)os.ftruncate(<fd>, <length>)
- 將文件描述符 <fd>與 指向的文件切分開,以使其最大為<length> 字節(jié)昆雀。
- 與os.truncate()等效辱志。
>>>import os >>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b"Hello World!") >>>os.ftruncate(file, 5) # 這里限制了最大字節(jié)為5 >>>os.lseek(file, 0, 0) >>>print(os.read(fd, 100)) b'Hello'
65)os.get_blocking(<fd>)
- 獲取文件描述符的阻塞模式。
- 如果設(shè)置了 O_NONBLOCK標(biāo)志位狞膘,返回 False揩懒。
- 如果該標(biāo)志位被清除,返回True挽封。
- 只能在Unix系統(tǒng)使用已球。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.get_blocking(file) True
66)os.isatty(<fd>)
- 判斷如果文件描述符<fd>是打開的。
- 如果同時(shí)與字符終端tty(-like)設(shè)備相連辅愿,則返回true, 否則False智亮。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(fd,b"Hello World!") >>>os.close(file) >>>os.isatty(file) False
67)os.lockf(<fd>, <cmd>, <len>)
- 使用、測(cè)試或取消<fd>的Posix鎖渠缕。
- <cmd>包括:os.F_LOCK,os.F_TLOCK,os.F_ULOCK,os.F_TEST
- <len>表示鎖定<fd>的位置鸽素。
- 只能在Unix系統(tǒng)使用。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.lockf(file,os.F_LOCK,100)
68)os.lseek(<fd>, <pos>, <how>)
- 設(shè)置文件描述符 <fd> 當(dāng)前位置為 <pos>, 并以<how> 方式修改亦鳞。
- <how>方法包括:
方法 含義 os.SEEK_SET 或者 0 設(shè)置從文件開始的計(jì)算的<pos>; os.SEEK_CUR或者 1 從當(dāng)前位置計(jì)算; os.SEEK_END或者2 從文件尾部開始馍忽。 >>>fd = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(fd, b"Hello World!") >>>os.lseek(fd, 2,0 ) # 指定當(dāng)前位置為2 >>>os.read(fd, 100) b'llo World!'
69)os.open(<path>, <flags>, <mode=0o777>, *, <dir_fd=None>)
- 用于打開一個(gè)文件<path>,并且設(shè)置需要的打開選項(xiàng)<flags>
- 模式參數(shù)mode參數(shù)是可選的燕差,默認(rèn)為 0777遭笋。
- <flags>包含以下參數(shù):
方法 含義 os.O_RDONLY 以只讀的方式打開 os.O_WRONLY 以只寫的方式打開 os.O_RDWR 以讀寫的方式打開 os.O_NONBLOCK 打開時(shí)不阻塞 os.O_APPEND 以追加的方式打開 os.O_CREAT 創(chuàng)建并打開一個(gè)新文件 os.O_TRUNC 打開一個(gè)文件并截?cái)嗨拈L度為零(必須有寫權(quán)限) os.O_EXCL 如果指定的文件存在,返回錯(cuò)誤 os.O_SHLOCK 自動(dòng)獲取共享鎖 os.O_EXLOCK 自動(dòng)獲取獨(dú)立鎖 os.O_DIRECT 消除或減少緩存效果 os.O_FSYNC 同步寫入 os.O_NOFOLLOW 不追蹤軟鏈接 >>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT )
70)os.openpty()
- 用于打開一個(gè)新的偽終端對(duì)徒探。
- 返回 pty(主) 和 tty(從)的文件描述符瓦呼。
- 只能在Unix系統(tǒng)使用。
>>>pty,tty = os.openpty() >>>print(pty) 6 >>>print(tty) 7
71)os.pipe()
- 創(chuàng)建一個(gè)管道, 返回一對(duì)文件描述符(r, w) 分別為讀和寫测暗。
>>>import os >>>r,w = os.pipe() >>>w = os.fdopen(w,'w') >>>r = os.fdopen(r) >>>w.write('Hello World!') >>>w.close() >>>print(r.read()) >>>r.close() Hello World!
72)os.pipe2(<flag>)
- 與os.pipe相同央串,創(chuàng)建一個(gè)管道,返回一對(duì)文件描述符(r,w)分別為讀和寫碗啄。
- <flag>包含兩個(gè)參數(shù)O_NONBLOCK和O_NDELAY质和。
- O_NONBLOCK和O_NDELAY所產(chǎn)生的結(jié)果都是使I/O變成非阻塞模式(non-blocking),在讀取不到數(shù)據(jù)或是寫入緩沖區(qū)已滿會(huì)馬上return稚字,而不會(huì)阻塞等待饲宿。
- O_NDELAY是在System V的早期版本中引入的,建議使用O_NONBLOCK厦酬。
- 只能在Unix系統(tǒng)使用。
>>>import os >>>flag = os.O_NONBLOCK >>>r,w = os.pipe2(flag) >>>w = os.fdopen(w,'w') >>>r = os.fdopen(r) >>>w.write('Hello World!') >>>w.close() >>>print(r.read()) Hello World! >>>r.close()
73)os.posix_fallocate(<fd>, <offset>, <len>)
- 為文件描述符<fd>關(guān)聯(lián)的文件預(yù)留磁盤空間瘫想。
- 只能在Unix系統(tǒng)使用仗阅。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.posix_fallocate(file,0,10)
74)os.posix_fadvise(<fd>, <offset>, <len>, <advice>)
- 用于預(yù)讀<fd>所關(guān)聯(lián)文件占用的緩存。
- <advice>包含以下參數(shù):
參數(shù) 建議 功能 POSIX_FADV_NORMAL 無特別建議 重置預(yù)讀大小為默認(rèn)值 POSIX_FADV_SEQUENTIAL 將要進(jìn)行順序操作 設(shè)預(yù)讀大小為默認(rèn)值的2 倍 POSIX_FADV_RANDOM 將要進(jìn)行隨機(jī)操作 將預(yù)讀大小清零(禁止預(yù)讀) POSIX_FADV_NOREUSE 指定的數(shù)據(jù)將只訪問一次 (暫無動(dòng)作) POSIX_FADV_WILLNEED 指定的數(shù)據(jù)即將被訪問 立即預(yù)讀數(shù)據(jù)到page cache POSIX_FADV_DONTNEED 指定的數(shù)據(jù)近期不會(huì)被訪問 立即從page cache 中丟棄數(shù)據(jù)
- 只能在Unix系統(tǒng)使用国夜。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.posix_fadvise(file,0,10,os.POSIX_FADV_NORMAL)
75)os.pread(<fd>, <n>, <offset>)
- 實(shí)際作用與os.read+os.lseek函數(shù)作用相同减噪。
- 區(qū)別是pread執(zhí)行后,不會(huì)改變文件指針的偏移支竹。
- 且pread是原子操作旋廷,無法中斷其定位和讀操作鸠按。
- 只能在Unix系統(tǒng)使用礼搁。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b'Hello World!') >>>os.pread(file,20,0) b'Hello World!'
76)os.preadv(<fd>, <buffers>, <offset>, <flags=0>)
- 結(jié)合了 os.readv() 與 os.pread() 的功能褪秀。
- <flags>可以是0,os.RWF_HIPRI或os.RWF_NOWAIT牵现。
- 只能在Unix系統(tǒng)使用诸老。
77)os.RWF_NOWAIT
- 作為參數(shù)存在如庭。
- 如果無法馬上獲取數(shù)據(jù)則不等待寓调。
- 數(shù)據(jù)到位后再返回flag處讀取數(shù)據(jù)综膀。
- 只能在Unix系統(tǒng)4.14版本以上使用呻征。
78)os.RWF_NOWAIT
- 作為參數(shù)存在谆级。
- 高讀寫優(yōu)先級(jí)洞拨,會(huì)降低延遲扯罐,但可能會(huì)消耗更多資源。
- 只能在Unix系統(tǒng)4.6版本以上使用烦衣。
79)os.pwrite(<fd>, <str>, <offset>)
- 帶偏移量地原子的從文件中寫入數(shù)據(jù)歹河。
- 寫入后文件指針不變。
- 只能在Unix系統(tǒng)使用花吟。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b'Hello World!') >>>os.pwrite(file,b'to you',5) # 從第五個(gè)字符開始寫入 >>>print(os.pread(file,20,0)) b'Helloto you!'
80)os.pwritev(<fd>, <buffers>, <offset>, <flags=0>)
- 結(jié)合了 os.writev() 和 os.pwrite() 的功能秸歧。
- <flags>可以是0,os.RWF_DSYNC或os.RWF_SYNC。
- 只能在Unix系統(tǒng)使用衅澈。
81)os.RWF_DSYNC
- 作為參數(shù)存在键菱。
- 用于保證磁盤上實(shí)際文件系統(tǒng)與緩沖區(qū)高速緩存中內(nèi)容的一致性。
- 相當(dāng)于os.DSYNC的預(yù)寫今布。
- 只接受系統(tǒng)寫入经备。
- 只能在Unix系統(tǒng)4.7版本以上使用。
82)os.RWF_SYNC
- 作為參數(shù)存在部默。
- 用于保證磁盤上實(shí)際文件系統(tǒng)與緩沖區(qū)高速緩存中內(nèi)容的一致性侵蒙。
- 相當(dāng)于os.SYNC的預(yù)寫。
- 只接受系統(tǒng)寫入甩牺。
- 只能在Unix系統(tǒng)4.7版本以上使用蘑志。
83)os.read(<fd>, <n>)
- 從文件描述符<fd>中讀取最多 <n> 個(gè)字節(jié)。
- 返回包含讀取字節(jié)的字符串,如果<fd>對(duì)應(yīng)文件已達(dá)到結(jié)尾, 返回一個(gè)空字符串急但。
>>>file = os.open( "test2.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b'Hello World!') >>>os.lseek(file,0,0) >>>os.read(file,20) b'Hello World!'
84)os.sendfile(<out>, <in>, <offset>, <count>, <flags=0>))
- 從<in>的<offset>位置澎媒,復(fù)制<count>個(gè)字節(jié)到<out>。
- <flags>可以是os.SF_NODISKIO波桩、os.SF_MNOWAIT或os.SF_SYNC戒努。
- 只能在Unix系統(tǒng)使用。
>>>file1 = os.open( "test1.txt", os.O_RDWR|os.O_CREAT ) >>>file2 = os.open( "test2.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file1,b'Hello World!') >>>os.sendfile(file2,file1,2,4) # 從第二個(gè)字節(jié)開始復(fù)制4個(gè)字節(jié) 4 >>>os.pread(file2,20,0) b'llo '
85)os.set_blocking(fd, blocking)
- 設(shè)置<fd>的阻塞模式镐躲。
- 如果沒有阻塞储玫,則設(shè)置<blocking>為os.O_NONBLOCK。
- 只能在Unix系統(tǒng)使用萤皂。
>> file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >> os.set_blocking(file,os.O_NONBLOCK)
86)os.readv(<fd>, <buffers>)
- 用于將數(shù)據(jù)從文件描述符讀到分散的內(nèi)存塊<buffers>中撒穷。
- 只能在Unix系統(tǒng)使用。
87)os.tcgetpgrp(<fd>)
- 返回與<fd>關(guān)聯(lián)的進(jìn)程組裆熙。
- 只能在Unix系統(tǒng)使用端礼。
>>>file = os.open( "test.txt", os.O_RDONLY ) >>>os.tcgetpgrp(file) 2673
88)os.tcsetpgrp(<fd>, <pg>)
- 將<fd>關(guān)聯(lián)的進(jìn)程組設(shè)置為<pg>。
- 只能在Unix系統(tǒng)使用入录。
>>>file = os.open( "test.txt", os.O_RDONLY ) >>>os.tcsetpgrp(file,2020) >>>os.tcgetpgrp(file) 2020
89) os.ttyname(<fd>)
- 返回與<fd>關(guān)聯(lián)的終端設(shè)備名蛤奥。
- 如果<fd> 沒有與終端設(shè)備關(guān)聯(lián),則引發(fā)一個(gè)異常僚稿。
- 只能在Unix系統(tǒng)使用凡桥。
90) os.write(<fd>, <str>)
- 用于寫入<str>到<fd> 中。
- 返回實(shí)際寫入的字符串長度蚀同。
- 只能在Unix系統(tǒng)使用缅刽。
>>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.write(file,b'Hello World!') 12 >>>os.pread(file,20) b'Hello World!'
91)os.writev(<fd>, <buffers>)
- 將多塊分散的內(nèi)存<buffers>一并寫入文件描述符中。
- 只能在Unix系統(tǒng)使用唤崭。
92)os.get_terminal_size(fd=STDOUT_FILENO)
- 獲取<fd>關(guān)聯(lián)的終端尺寸拷恨。
>>>os.get_terminal_size() os.terminal_size(columns=164, lines=25)
93)os.get_inheritable(<fd>)
- 用于判斷<fd>是否可以被繼承。
>>> file = os.open( "test.txt", os.O_RDONLY ) >>> os.get_inheritable(file) False
94)os.set_inheritable(<fd>, <inheritable>)
- 用于設(shè)置<fd>是否可以被繼承谢肾。
>>> file = os.open( "test.txt", os.O_RDONLY ) >>> os.set_inheritable(file,True) >>> os.get_inheritable(file) True
95)os.get_handle_inheritable(<handle>)
- 用于判斷句柄<handle>是否可以被繼承腕侄。
- 只能在Windows系統(tǒng)使用。
>>>import os >>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.get_handle_inheritable(file)
96)os.set_handle_inheritable(<handle>, <inheritable>)
- 用于設(shè)置句柄<handle>是否可以被繼承芦疏。
- 只能在Windows系統(tǒng)使用冕杠。
>>>import os >>>file = os.open( "test.txt", os.O_RDWR|os.O_CREAT ) >>>os.set_handle_inheritable(file, False) >>>os.get_handle_inheritable(file) False
3. 文件和路徑
97)os.access(<path>, <mode>, *, <dir_fd=None>, <effective_ids=False>, <follow_symlinks=True>)
- 檢驗(yàn)是否有權(quán)限訪問路徑。
- <mode>包括:
參數(shù) 功能 os.F_OK 測(cè)試path是否存在酸茴。 os.R_OK 測(cè)試path是否可讀分预。 os.W_OK 測(cè)試path是否可寫。 os.X_OK 測(cè)試path是否可執(zhí)行 >>>os.access('c:', os.F_OK) True
98)os.chdir(<path>)
- 改變當(dāng)前工作目錄到指定的路徑<path>薪捍。
>>>import os >>>print(os.getcwd()) C:\Users\xiaor >>>os.chdir('D:') >>>print(os.getcwd()) D:\
99)os.chflags(<path>, <flags>, *, <follow_symlinks=True>)
- 用于設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記笼痹。
- 多個(gè)標(biāo)記可以使用 OR 來組合起來配喳。
- <flags>可以包含:
參數(shù) 功能 stat.UF_NODUMP 非轉(zhuǎn)儲(chǔ)文件 stat.UF_IMMUTABLE 文件是只讀的 stat.UF_APPEND 文件只能追加內(nèi)容 stat.UF_NOUNLINK 文件不可刪除 stat.UF_OPAQUE 目錄不透明,需要通過聯(lián)合堆棧查看 stat.SF_ARCHIVED 可存檔文件(超級(jí)用戶可設(shè)) stat.SF_IMMUTABLE 文件是只讀的(超級(jí)用戶可設(shè)) stat.SF_APPEND 文件只能追加內(nèi)容(超級(jí)用戶可設(shè)) stat.SF_NOUNLINK 文件不可刪除(超級(jí)用戶可設(shè)) stat.SF_SNAPSHOT 快照文件(超級(jí)用戶可設(shè))
- 只能在Unix系統(tǒng)使用凳干。
>>> import os, stat >>> flag = stat.UF_APPEND >>> os.chflags('test.txt',flag)
100)os.chmod(<path>, <mode>, *, <dir_fd=None>, <follow_symlinks=True>)
- 用于更改文件或目錄的權(quán)限晴裹。
- <mode>可以包含:
參數(shù) 功能 stat.S_IXOTH 其他用戶有執(zhí)行權(quán)0o001 stat.S_IWOTH 其他用戶有寫權(quán)限0o002 stat.S_IROTH 其他用戶有讀權(quán)限0o004 stat.S_IRWXO 其他用戶有全部權(quán)限(權(quán)限掩碼)0o007 stat.S_IXGRP 組用戶有執(zhí)行權(quán)限0o010 stat.S_IWGRP 組用戶有寫權(quán)限0o020 stat.S_IRGRP 組用戶有讀權(quán)限0o040 stat.S_IRWXG 組用戶有全部權(quán)限(權(quán)限掩碼)0o070 stat.S_IXUSR 擁有者具有執(zhí)行權(quán)限0o100 stat.S_IWUSR 擁有者具有寫權(quán)限0o200 stat.S_IRUSR 擁有者具有讀權(quán)限0o400 stat.S_IRWXU 擁有者有全部權(quán)限(權(quán)限掩碼)0o700 stat.S_ISVTX 目錄里文件目錄只有擁有者才可刪除更改0o1000 stat.S_ISGID 執(zhí)行此文件其進(jìn)程有效組為文件所在組0o2000 stat.S_ISUID 執(zhí)行此文件其進(jìn)程有效用戶為文件所有者0o4000 stat.S_IREAD windows下設(shè)為只讀 stat.S_IWRITE windows下取消只讀 >>>import os,stat >>>os.open('test.txt',os.O_RDWR|os.O_CREAT) >>>os.chmod('test.txt',stat.S_IXOTH)
101)os.chown(<path>, <uid>, <gid>, *, <dir_fd=None>, <follow_symlinks=True>)
- 用于更改文件所有者。
- <uid>為用戶所屬ID救赐。
- <gid>為用戶所屬組涧团。
- 如果不修改可以設(shè)置為 -1。
- 只能在Unix系統(tǒng)使用经磅。
>>> os.chown('test.txt',500,501)
102)os.chroot(<path>)
- 用于更改當(dāng)前進(jìn)程的根目錄為指定的目錄泌绣。
- 只能在Unix系統(tǒng)使用。
>>> os.getcwd() '/home/ubuntu' >>> os.chroot('/home/ubuntu'); >>> os.getcwd() '/'
103)os.fchdir(<fd>)
- 將當(dāng)前工作目錄更改為由文件描述符<fd>表示的目錄预厌。
- 只能在Unix系統(tǒng)使用阿迈。
>>> file = os.open('/home/ubuntu',os.O_RDONLY) >>> os.fchdir(file) >>> os.getcwd() '/home/ubuntu'
104)os.getcwd()
- 獲得當(dāng)前的工作目錄。
>>> os.getcwd() '/home/ubuntu'
105)os.getcwdb()
- 獲得當(dāng)前的工作目錄配乓。
>>> os.getcwdb() b'/home/ubuntu'
106)os.lchflags(<path>, <flags>)
- 用于設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記仿滔。
- <flags>與chflags()的參數(shù)相同。
- 類似 os.chflags()犹芹,但是沒有軟鏈接
- 只能在Unix系統(tǒng)使用。
>>> import os, stat >>> flag = stat.UF_APPEND >>> os.lchflags('test.txt',flag)
107)os.lchmod(<path>, <mode>)
- 用于修改連接文件權(quán)限鞠绰。
- <mode>參數(shù)與os.chmod()相同腰埂。
- 只能在Unix系統(tǒng)使用。
>>>os.lchmod('test.txt',stat.S_IXOTH)
108)os.lchown(<path>, <uid>, <gid>)
- 用于更改文件所有者蜈膨,類似 chown屿笼。
- 但是不追蹤鏈接。
- 只能在Unix系統(tǒng)使用翁巍。
>>> os.lchown('test.txt',500,501)
109)os.link(<src>, <dst>, *,<src_dir_fd=None>, <dst_dir_fd=None>, <follow_symlinks=True>)
- 用于創(chuàng)建硬鏈接驴一。
- 硬連接的源地址為參數(shù)為 <dst>,硬連接的目標(biāo)地址參數(shù)為 <src>灶壶。
>>>file = os.open('test1.txt',os.O_RDWR|os.O_CREAT) >>>os.link('test1.txt','test2.txt')
110)os.listdir(path='.')
- 返回指定的文件夾包含的文件或文件夾的名字的列表肝断。
- 默認(rèn)為當(dāng)前文件夾。
>>>os.listdir() >>> os.listdir() ['~', 'test.txt', 'test1.txt','test2.txt']
111)os.lstat(<path>, *, <dir_fd=None>)
- 返回文件的信息驰凛。
- 類似 os.stat() ,但是沒有軟鏈接胸懈。
>>>os.lstat('d:') os.stat_result(st_mode=16895, st_ino=1407374883553285, st_dev=1544123431, st_nlink=1, st_uid=0, st_gid=0, st_size=8192, st_atime=1575036233, st_mtime=1575036233, st_ctime=1530322701)
112)os.mkdir(<path>, <mode=0o777>, *, <dir_fd=None>)
- 以數(shù)字權(quán)限模式創(chuàng)建目錄。
- 默認(rèn)的模式為 0777 (八進(jìn)制)恰响。
- 如果中間層文件夾不存在趣钱,則報(bào)錯(cuò)。
>>>os.mkdir('d:\\test') >>>os.path.isdir('d:\\test') # 判斷目錄是否存在 True >>>os.mkdir('d:\\test1\\test\\test') # 中間層文件夾不存在胚宦,所以報(bào)錯(cuò)首有。 FileNotFoundError Traceback (most recent call last) <ipython-input-41-5d6e02fea36b> in <module> ----> 1 os.mkdir('d:\\test1\\test\\test')
113)os.makedirs(<name>, <mode=0o777>, <exist_ok=False>)
- 用于遞歸創(chuàng)建目錄燕垃。
- 像 mkdir(), 如果中間層文件夾不存在,則創(chuàng)建中間層文件夾井联。
>>>os.makedirs('d:\\test1\\test1') >>>os.path.isdir('d:\\test1\\test1') True
114)os.mkfifo(<path>, <mode=0o666>, *, <dir_fd=None>)
- 用于創(chuàng)建指令路徑的管道利术,并設(shè)置權(quán)限模式。
- 默認(rèn)的模式為 0666 (八進(jìn)制)低矮。
- 只能在Unix系統(tǒng)使用印叁。
>>>os.mkfifo('/home/ubuntu/test') >>>os.stat('/home/ubuntu/test') os.stat_result(st_mode=4532, st_ino=344344, st_dev=64769, st_nlink=1, st_uid=500, st_gid=500, st_size=0, st_atime=1575037833, st_mtime=1575037833, st_ctime=1575037833)
115)os.mknod(<path>, <mode=0o600>, <device=0>, *, <dir_fd=None>)
- 用于創(chuàng)建一個(gè)指定文件名的文件系統(tǒng)節(jié)點(diǎn)。
- 只能在Unix系統(tǒng)使用军掂。
>>> os.mknod('/home/ubuntu/inode') >>> os.stat('/home/ubuntu/inode') os.stat_result(st_mode=33152, st_ino=344349, st_dev=64769, st_nlink=1, st_uid=500, st_gid=500, st_size=0, st_atime=1575038235, st_mtime=1575038235, st_ctime=1575038235)
116)os.major(<device>)
- 從原始的設(shè)備號(hào)中提取設(shè)備的major號(hào)碼轮蜕。
- major號(hào)表示設(shè)備的主設(shè)備號(hào)。
>>> info = os.lstat('test.txt') >>> os.major(info.st_dev) 253
117)os.minor(<device>)
- 從原始的設(shè)備號(hào)中提取設(shè)備的minor號(hào)碼蝗锥。
- minor號(hào)表示設(shè)備的次設(shè)備號(hào)跃洛。
>>> info = os.lstat('test.txt') >>> os.minor(info.st_dev) 1
118)os.makedev(<major>, <minor>)
- 以major和minor設(shè)備號(hào)組成一個(gè)原始設(shè)備號(hào)。
>>> info = os.lstat('test.txt') >>> major = os.major(info.st_dev) >>> minor = os.minor(info.st_dev) >>> os.makedev(major,minor) 64769
119)os.pathconf(<path>,<name>)
- 返回一個(gè)打開的文件的系統(tǒng)配置信息终议。
- <name>是檢索的系統(tǒng)配置的值汇竭,它也許是一個(gè)定義系統(tǒng)值的字符串,這些名字在很多標(biāo)準(zhǔn)中指定(POSIX.1, Unix 95, Unix 98, 和其它)穴张。一些平臺(tái)也定義了一些額外的名字细燎。這些名字在主操作系統(tǒng)上pathconf_names的字典中。對(duì)于不在pathconf_names中的配置變量皂甘,傳遞一個(gè)數(shù)字作為名字玻驻,也是可以接受的。
- 只能在Unix系統(tǒng)使用偿枕。
>>> file = os.open('text.txt',os.O_RDWR|os.O_CREAT) >>> os.fpathconf(file,1) 255
120)os.pathconf_names
- 返回系統(tǒng)路徑的環(huán)境變量璧瞬,可以作為os.poathcof()和fpathconf()的參數(shù)。
- 只能在Unix系統(tǒng)使用渐夸。
>>> os.pathconf_names {'PC_ALLOC_SIZE_MIN': 18, 'PC_ASYNC_IO': 10, 'PC_CHOWN_RESTRICTED': 6, 'PC_FILESIZEBITS': 13, 'PC_LINK_MAX': 0, 'PC_MAX_CANON': 1, 'PC_MAX_INPUT': 2, 'PC_NAME_MAX': 3, 'PC_NO_TRUNC': 7, 'PC_PATH_MAX': 4, 'PC_PIPE_BUF': 5, 'PC_PRIO_IO': 11, 'PC_REC_INCR_XFER_SIZE': 14, 'PC_REC_MAX_XFER_SIZE': 15, 'PC_REC_MIN_XFER_SIZE': 16, 'PC_REC_XFER_ALIGN': 17, 'PC_SOCK_MAXBUF': 12, 'PC_SYMLINK_MAX': 19, 'PC_SYNC_IO': 9, 'PC_VDISABLE': 8}
121)os.readlink(<path>, *, <dir_fd=None>)
- 返回軟鏈接所指向的文件,<path> 到 <dir_fd>嗤锉。
- 可能返回絕對(duì)或相對(duì)路徑。
- 只能在Unix系統(tǒng)使用墓塌。
>>> os.symlink('test1.txt','test2.txt') >>> path = os.readlink('test2.txt') >>> print(path) test1.txt
122)os.remove(<path>, *, <dir_fd=None>)
- 用于刪除指定路徑的文件瘟忱。
- 不可以用于刪除目錄。
>>> os.remove('text.txt') >>> os.path.isfile('text.txt') # 判斷文件是否存在 False
123)os.removedirs(<name>)
- 用于刪除目錄桃纯。
- 采用遞歸的方式酷誓,先刪除子目錄內(nèi)容,再刪除父目錄态坦。
>>>os.mkdir('test') # 創(chuàng)建目錄 >>>print(os.path.isdir('test')) # 判斷目錄是否存在 True >>>os.removedirs('test') >>>print(os.path.isdir('test')) # 證明目錄已被刪除 False
124)os.rename(<src>, <dst>, *, <src_dir_fd=None>, <dst_dir_fd=None>)
- 將<src>重命名為<dst>
- <src>可以是文件或目錄
>>>os.mkdir('test1') >>>print(os.path.isdir('test1')) True >>>os.rename('test1','test2') >>>print(os.path.isdir('test2')) True
125)os.renames(<old>, <new>)
- 類似os.rename()盐数,將<old>重命名為<new>。
- <new>可以是文件名也可以是路徑名伞梯,意味著可以在命名同時(shí)將文件移動(dòng)位置玫氢。
>>>print(os.path.isfile('test.txt')) # 文件存在 True >>>os.renames('test.txt','test/test1.txt') >>>print(os.path.isfile('test/test1.txt')) # 已經(jīng)改名并改變路徑 True >>>print(os.path.isfile('test.txt')) # 源文件不存在 False
126)os.replace(<src>, <dst>, *, <src_dir_fd=None>, <dst_dir_fd=None>)
- 用<src>替換<dst>帚屉。
- 可以理解為先刪除<dst>,再將<src>改名為<dst>。
>>>f = os.open('test1.txt',os.O_RDONLY) >>>os.read(f,50) 'Hello World from test1.txt' >>>os.replace('test1.txt','test2.txt') >>>f = os.open('test2.txt',os.O_RDONLY) >>>os.read(f,50) 'Hello World from test1.txt'
127)os.rmdir(<path>, *, <dir_fd=None>)
- 與os.removedirs類似漾峡,用于刪除指定路徑的目錄攻旦。
- 與os.removedirs不同的是,目標(biāo)文件夾必須為空生逸。
>>>print(os.path.isdir('test')) True >>>os.rmdir('test') # 'test'必須為空牢屋,不然會(huì)報(bào)錯(cuò) >>>print(os.path.isdir('test')) False
128)os.scandir(<path='.'>)
- 用于遍歷目錄,返回一個(gè)包含文件夾槽袄、子目錄中文件名的迭代器烙无,迭代器中包含os.DirEntry對(duì)象列表。
- 類似os.listdir(),但是速度更快遍尺,是os.listdir()的替代方案截酷。
>>>with os.scandir() as it: >>> for entry in it: >>> if not entry.name.startswith('.') and entry.is_file(): >>> print(entry.name) build_exe.exe chardetect.exe distro.exe dumppdf.py easy_install-3.7.exe easy_install.exe f2py.exe falcon-bench.exe falcon-print-routes.exe ...
129)os.DirEntry對(duì)象
- 是os.scandir返回的可迭代列表中包含的對(duì)象。
- 對(duì)象中包含文件名和文件信息乾戏。
- 包含以下方法:
方法/值 作用 name 文件名 path 完整路徑 inode() 返回inode值 is_dir() 判斷是否是路徑 is_file() 判斷是否是文件 is_symlink() 判斷是否是符號(hào)鏈接 stat() 返回文件屬性 >>>with os.scandir() as it: >>> for entry in it: >>> if not entry.name.startswith('.') and entry.is_file(): >>> print('name:' + entry.name) >>> print('path:' + entry.path) >>> print('inode:' + str(entry.inode())) >>> print('is_dir:' + str(entry.is_dir())) >>> print('is_file:' + str(entry.is_file())) >>> print('is_symlink:' + str(entry.is_symlink())) >>> print('stat:' + str(entry.stat())) >>> break name:01.py path:.\01.py inode:1970324837274092 is_dir:False is_file:True is_symlink:False stat:os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=379, st_atime=1573300314, st_mtime=1573300314, st_ctime=1573300314)
130)os.stat(<path>, *, <dir_fd=None>, <follow_symlinks=True>)
- 獲得一個(gè)文件或路徑的屬性迂苛。
- 以下是返回值的解析。
參數(shù) 功能 st_mode inode 保護(hù)模式 st_ino inode 節(jié)點(diǎn)號(hào)鼓择。 st_dev inode 駐留的設(shè)備三幻。 st_nlink inode 的鏈接數(shù)。 st_uid 所有者的用戶ID惯退。 st_gid 所有者的組ID赌髓。 st_size 普通文件以字節(jié)為單位的大小催跪;包含等待某些特殊文件的數(shù)據(jù)。 st_atime 上次訪問的時(shí)間夷野。 st_mtime 最后一次修改的時(shí)間懊蒸。 st_ctime 由操作系統(tǒng)報(bào)告的"ctime"。在某些系統(tǒng)上(如Unix)是最新的元數(shù)據(jù)更改的時(shí)間悯搔,在其它系統(tǒng)上(如Windows)是創(chuàng)建時(shí)間(詳細(xì)信息參見平臺(tái)的文檔)骑丸。 >>>os.stat('d:\\') os.stat_result(st_mode=16895, st_ino=1407374883553285, st_dev=1544123431, st_nlink=1, st_uid=0, st_gid=0, st_size=8192, st_atime=1575037605, st_mtime=1575037605, st_ctime=1530322701)
131)os.statvfs(<path>)
- 用于返回文件描述符<path>對(duì)應(yīng)的文件系統(tǒng)的信息。
- 只能在Unix系統(tǒng)使用妒貌。
- 以下是返回值的解析通危。
參數(shù) 功能 f_bsize 文件系統(tǒng)塊大小 f_frsize 分棧大小 f_blocks 文件系統(tǒng)數(shù)據(jù)塊總數(shù) f_bfree 可用塊數(shù) f_bavail 非超級(jí)用戶可獲取的塊數(shù) f_files 文件結(jié)點(diǎn)總數(shù) f_ffree 可用文件結(jié)點(diǎn)數(shù) f_favail 非超級(jí)用戶的可用文件結(jié)點(diǎn)數(shù) f_fsid 文件系統(tǒng)標(biāo)識(shí) ID f_flag 掛載標(biāo)記 f_namemax 最大文件長度 >>> file = os.open('test.txt',os.O_RDONLY) >>> os.statvfs('test.txt') os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=12868511, f_bfree=11197137, f_bavail=10537695, f_files=3276800, f_ffree=3099903, f_favail=3099903, f_flag=1024, f_namemax=255)
132)os.supports_dir_fd
- 返回Unix系統(tǒng)支持dir_fd的參數(shù)。
- 返回的是一個(gè)set灌曙。
>>>os.supports_dir_fd {<built-in function chown>, <built-in function mkdir>, <built-in function access>, <built-in function symlink>, <built-in function unlink>, <built-in function link>, <built-in function mkfifo>, <built-in function open>, <built-in function rmdir>, <built-in function stat>, <built-in function mknod>, <built-in function readlink>, <built-in function chmod>, <built-in function rename>, <built-in function utime>}
133)os.supports_effective_ids
- 返回Unix系統(tǒng)支持effective_ids的參數(shù)菊碟。
- 返回的是一個(gè)set。
>>> os.supports_effective_ids {<built-in function access>}
134)os.supports_fd
- 檢查是否可以在平臺(tái)上將路徑指定為文件描述符在刺。
>>>os.supports_fd {<function nt.stat(path, *, dir_fd=None, follow_symlinks=True)>,<function nt.truncate(path, length)>}
135)os.supports_follow_symlinks
- 檢查是否可以在平臺(tái)上使用符號(hào)連接的相關(guān)功能逆害。
>> os.supports_follow_symlinks {<built-in function chown>, <built-in function access>, <built-in function link>, <built-in function stat>, <built-in function utime>}
136)os.symlink(<src>, <dst>, <target_is_directory=False>, *, <dir_fd=None>)
- 為源文件<src>和目標(biāo)文件<dst>創(chuàng)建一個(gè)軟鏈接头镊。
- <dst>必須是一個(gè)新的文件名。
>>>os.symlink('test1.txt','test2.txt') >>>file = open('test2.txt',r) >>>file.read() 'Hello World!'
137)os.sync()
- 將系統(tǒng)緩沖區(qū)(內(nèi)存中)的數(shù)據(jù)寫入到文件系統(tǒng)(磁盤)中魄幕。
- 只能在Unix系統(tǒng)使用相艇。
>>> import ctypes >>> libc = ctypes.CDLL("libc.so.6") >>> libc.sync() >>> print(libc) <CDLL 'libc.so.6', handle 7faf68a564e8 at 0x7faf677a8850>
138)os.truncate(<path>, <length>)
- 截?cái)辔募?lt;path>并返回截?cái)嗟淖止?jié)<length>。
- <path>必須是絕對(duì)地址纯陨。
>>> file = open('test.txt') >>> file.read() 'Hello World!' >>>path = os.path.join(os.path.curdir,'test.txt') >>>os.truncate(path,5) # 從第5個(gè)字符開始截?cái)?>>>file.read() 'Hello'
139)os.unlink(<path>, *, <dir_fd=None>)
- 用于刪除文件<path>坛芽,不可以刪除目錄。
- 與remove()完全相同翼抠。
>>>print(os.path.isfile('test.txt')) True >>>os.unlink('test.txt') # 刪除文件 >>>print(os.path.isfile('test.txt')) False
140)os.utime(<path>, <times=None>, *, <[ns, ]dir_fd=None>, <follow_symlinks=True>)
- 用于設(shè)置指定路徑文件<path>最后的修改和訪問時(shí)間<times>咙轩。
>>>stinfo = os.stat('test.txt') >>>print(stinfo[-3:]) [st_atime=1575297708, st_mtime=1575297708, st_ctime=1574776862] >>>os.utime('test.txt',(12123123123,123123123)) >>>stinfo = os.stat('test.txt') >>>print(stinfo[-3:]) [st_atime=12123123123, st_mtime=123123123, st_ctime=1574776862)
141)os.walk(<top>, <topdown=True>, <onerror=None>, <followlinks=False>)
- 用于自外向內(nèi)遍歷目錄<top>。
- <topdown>為可選參數(shù)机久,默認(rèn)為True臭墨,優(yōu)先遍歷 <top> 目錄;為False則優(yōu)先遍歷 <top> 的子目錄(默認(rèn)為開啟)膘盖。
- <onerror>為可選參數(shù)胧弛,當(dāng) walk 需要異常時(shí),會(huì)調(diào)用onerror中的callable 對(duì)象侠畔。
- <followlinks>為可選參數(shù)结缚,如果為 True會(huì)遍歷目錄下的快捷方式。
- os.walk將返回一個(gè)三元組(root,dirs,files)软棺。
元素 含義 root 所指的是當(dāng)前正在遍歷的這個(gè)文件夾的本身的地址 dirs 是一個(gè) list 红竭,內(nèi)容是該文件夾中所有的目錄的名字(不包括子目錄) files 同樣是 list , 內(nèi)容是該文件夾中所有的文件(不包括子目錄)
- 以下方法將打印出當(dāng)前文件夾下的所有目錄和文件名,是常用的文件遍歷工具喘落。
>>>for root, dirs, files in os.walk(".", topdown=False): >>> print('root = {root}'.format(root=root)) # 根路徑 >>> for dir in dirs: # 遍歷所有的目錄 >>> print('dir = {dir}'.format(dir=dir)) >>> for file in files: # 遍歷所有的文件 >>> print('file={file}'.format(file=file))
142)os.fwalk(<top='.'>, <topdown=True>, <onerror=None>, *, <follow_symlinks=False, dir_fd=None>)
- 與os.walk()幾乎相同茵宪,但是返回的是個(gè)四元組(root,dirs,files,dir_fd)。
- <dir_fd>是所有文件的描述符瘦棋,os.fwalk可以遍歷文件描述符味咳。
- 只能在Unix系統(tǒng)使用术荤。
>>> for root,dirs,files,dir_fd in os.fwalk(): >>> print(dir_fd) 3 4 5 5 5 5 5 5
143)os.memfd_create(<name>, <flags=os.MFD_CLOEXEC>)
- 創(chuàng)建一個(gè)匿名文件滚婉,并返回一個(gè)與其關(guān)聯(lián)的文件描述符豁陆。
- 這個(gè)文件就像是一個(gè)普通文件一樣,所以能夠被修改沛慢,截?cái)嗌娜簦瑑?nèi)存映射等等。
- 不同于一般文件团甲,此文件保存在RAM中逾冬。一旦所有指向這個(gè)文件的連接丟失,那么這個(gè)文件就會(huì)自動(dòng)被釋放伐庭。
- 必須在Linux 3.17版本以上使用粉渠。
144)os.getxattr(<path>, <attribute>, *, <follow_symlinks=True>)
- 返回<path>擴(kuò)展屬性所對(duì)應(yīng)的值分冈。
- 只能在Unix系統(tǒng)使用。
145)os.listxattr(<path=None>, *, <follow_symlinks=True>)
- 返回<path>相應(yīng)路徑的擴(kuò)展屬性霸株。
- 只能在Unix系統(tǒng)使用雕沉。
146)os.removexattr(<path>, <attribute>, *, <follow_symlinks=True>)
- 刪除<path>相應(yīng)路徑的擴(kuò)展屬性。
- 只能在Unix系統(tǒng)使用去件。
147)os.setxattr(<path>, <attribute>, <value>, <flags=0>, *, <follow_symlinks=True>)
- 設(shè)置<path>相應(yīng)路徑的擴(kuò)展屬性坡椒。
- <flags>可以是:
參數(shù) 功能 os.XATTR_CREATE 操作必須創(chuàng)建屬性 os.XATTR_REPLACE 操作必須替換現(xiàn)有屬性
- 只能在Unix系統(tǒng)使用。
148)os.XATTR_SIZE_MAX
- 返回系統(tǒng)支持的最大擴(kuò)展屬性值尤溜。
- 在linux中通常是65KB倔叼。
- 只能在Unix系統(tǒng)使用。
>>> os.XATTR_SIZE_MAX 65536
4. 進(jìn)程管理
149)os.abort()
- 與exit()相似宫莱,都是用來退出進(jìn)程丈攒。
- 強(qiáng)行發(fā)送終止信號(hào),直接殺掉當(dāng)前進(jìn)程授霸。
>>> os.abort() Aborted (core dumped)
150)os.add_dll_directory(path)
- 向dll搜索路徑添加路徑巡验。
- 只能在Windows系統(tǒng)使用。
151)os.execl(<path>, <arg0>, <arg1>, ...)
- <path>是可執(zhí)行文件的路徑
- <arg0>是可執(zhí)行文件碘耳。
- <arg1>是執(zhí)行的文件显设。
- <args> 是參數(shù)。
- os.execl家族包括:
方法 作用 os.execl(<file>, <arg0>,<arg1>,...) 用參數(shù)列表arg0, arg1 等等執(zhí)行文件 os.execv(<file>, <arglist>) 除了使用參數(shù)向量列表辛辨,其他的和execl()相同 os.execle(<file>, <arg0>,<arg1>,... <env>) 和execl 相同捕捂,但提供了環(huán)境變量字典env os.execve(<file>,<arglist>, <env>) 除了帶有參數(shù)向量列表,其他的和execle()相同 os.execlp(<cmd>, <arg0>,<arg1>,...) 于execl()相同斗搞,但是在用戶的搜索路徑下搜索完全的文件路徑名 os.execvp(<cmd>, <arglist>) 除了帶有參數(shù)向量列表指攒,與execlp()相同 os.execlpe(<cmd>, <arg0>, <arg1>,... <env>) 和execlp 相同,但提供了環(huán)境變量字典env os.execvpe(<cmd>,<arglist>, <env>) 和execvp 相同僻焚,但提供了環(huán)境變量字典env >>>import os >>>os.execl("d:\\python3.7","python","test.py") # 在操作系統(tǒng)中用python執(zhí)行test.py
152)os._exit(<n>)
- 與sys.exit()類似幽七,用于推出程序。
- 會(huì)直接將python程序終止溅呢,之后的所有代碼都不會(huì)繼續(xù)執(zhí)行。
- <n>可以是:
code 含義(在UNIX系統(tǒng)中) os.EX_OK 表示沒有發(fā)生錯(cuò)誤的退出代碼猿挚。 os.EX_USAGE 退出代碼咐旧,這意味著命令的使用不正確,例如給出的參數(shù)數(shù)目錯(cuò)誤绩蜻。 os.EX_DATAERR 表示輸入數(shù)據(jù)不正確的退出代碼铣墨。 os.EX_NOINPUT 表示輸入文件不存在或不可讀的退出代碼。 os.EX_NOUSER 表示指定用戶不存在的退出代碼办绝。 os.EX_NOHOST 表示指定主機(jī)不存在的退出代碼伊约。 os.EX_UNAVAILABLE 表示所需服務(wù)不可用的退出代碼姚淆。 os.EX_SOFTWARE 表示檢測(cè)到內(nèi)部軟件錯(cuò)誤的退出代碼。 os.EX_OSERR 退出代碼屡律,表示檢測(cè)到操作系統(tǒng)錯(cuò)誤腌逢,例如無法復(fù)刻或創(chuàng)建管道。 os.EX_OSFILE 退出代碼超埋,這意味著某些系統(tǒng)文件不存在搏讶、無法打開或有其他類型的錯(cuò)誤。 os.EX_CANTCREAT 退出代碼霍殴,表示無法創(chuàng)建用戶指定的輸出文件媒惕。 os.EX_IOERR 退出代碼,這意味著對(duì)某個(gè)文件執(zhí)行I/O時(shí)出錯(cuò)来庭。 os.EX_TEMPFAIL 表示發(fā)生臨時(shí)故障的退出代碼妒蔚。這表示可能不是真正的錯(cuò)誤,例如在可重試操作期間無法建立的網(wǎng)絡(luò)連接月弛。 os.EX_PROTOCOL 退出代碼肴盏,表示協(xié)議交換非法、無效或不被理解尊搬。 os.EX_NOPERM 退出代碼叁鉴,表示權(quán)限不足,無法執(zhí)行操作(但不適用于文件系統(tǒng)問題)佛寿。 os.EX_CONFIG 表示發(fā)生某種配置錯(cuò)誤的退出代碼幌墓。 os.EX_NOTFOUND 表示“找不到條目”的退出代碼。 >>> os._exit(0) ubuntu@VM-0-4-ubuntu:~$
153)os.fork()
- 創(chuàng)建一個(gè)新進(jìn)程冀泻。
- 新進(jìn)程是原進(jìn)程的子進(jìn)程常侣,原進(jìn)程為父進(jìn)程。
- 只能在Unix系統(tǒng)使用弹渔。
>>>pid = os.fork() >>>if pid == 0: >>> print "I am child process pid=%s, ppid=%s" % (os.getpid(), os.getppid()) >>> time.sleep(5) >>>else: >>> print "I am parent process pid=%s, ppid=%s" % (os.getpid(), os.getppid()) >>> time.sleep(5) I am parent process pid=20738 ppid=7898 I am child process pid=20799, ppid=20738
154)os.forkpty()
- 創(chuàng)建一個(gè)子進(jìn)程, 并使用一臺(tái)新的偽終端作為子進(jìn)程的控制終端胳施。
- 返回值為一對(duì)(pid, fd)。
- 其中pid在子進(jìn)程中為0, 而fd是偽終端主端的文件描述符肢专。
- 只能在某些版本的Unix系統(tǒng)使用舞肆。
>>> pid,fd = os.forkpty() >>>print(pid,fd) 22090 3
155)os.kill(<pid>, <sig>)
- 與os._exit()類似,用于關(guān)閉進(jìn)程博杖。
- 對(duì)進(jìn)程發(fā)送信號(hào)<sig>給進(jìn)程<pid>殺死進(jìn)程椿胯。
- <sig>的常用取值包括:
信號(hào) 功能 SIGINT 中斷進(jìn)程 SIGTERM 軟件終止信號(hào) SIGKILL 殺死進(jìn)程 SIGALRM 鬧鐘信號(hào) >>> import signal >>> os.kill(22090,signal.SIGINT)
156)os.killpg(<pgid>, <sig>)
- 對(duì)進(jìn)程組發(fā)送信號(hào)<sig>給進(jìn)程<pgid>進(jìn)程組。
- 只能在Unix系統(tǒng)使用剃根。
>>> import signal >>> os.killpg(2145,signal.SIGINT)
157)os.nice(<increment>)
- 提高進(jìn)程的調(diào)度優(yōu)先級(jí)哩盲。
- 只能在Unix系統(tǒng)使用。
>>> os.nice(10) 17
158)os.plock(<op>)
- 將程序段鎖定到內(nèi)存中。
- 只能在Unix系統(tǒng)使用廉油。
159)os.popen(<cmd>, <mode='r'>, <buffering=-1>)
- 用于從一個(gè)系統(tǒng)命令打開一個(gè)管道惠险。
- 返回命令的回顯。
- <cmd>是使用的指令抒线。
- <mode>是模式權(quán)限班巩,可以是r或w。
- <buffering>表示需要的緩沖大小:0表示無緩沖十兢;1表示進(jìn)行緩沖趣竣;其他正值表示使用參數(shù)大小的緩沖。
>>>cmd = os.popen('mkdir test') >>>print(cmd) <os._wrap_close at 0x1d1751f8e48> >>>os.path.isdir('test') True
160)os.posix_spawn(<path>, <argv>, <env>, *, <file_actions=None>, <setpgroup=None>, <resetids=False>, <setsid=False>, <setsigmask=()>, <setsigdef=()>, <scheduler=None>)
- 從python使用的C庫API posix_spawn()
- 創(chuàng)建一個(gè)進(jìn)程旱物。
- 大多數(shù)用戶不應(yīng)該使用這個(gè)方法遥缕,而應(yīng)該使用subprocess.run()
- 只能在Unix系統(tǒng)使用。
161)os.posix_spawnp(<path>, <argv>, <env>, *, <file_actions=None>, <setpgroup=None>, <resetids=False>, <setsid=False>, <setsigmask=()>, <setsigdef=()>, <scheduler=None>)
- 與os.posix_spawn()類似宵呛。
- 會(huì)在環(huán)境變量中搜索可執(zhí)行文件单匣。
162)os.register_at_fork(*,<before=None>, <after_in_parent=None>, <after_in_child=None>)
- 用os.fork或類似方法創(chuàng)建子進(jìn)程時(shí),要執(zhí)行的可調(diào)用函數(shù)宝穗。
- <before>指在創(chuàng)建子進(jìn)程之前調(diào)用的函數(shù)户秤。
- <after_in_parent> 是在子進(jìn)程創(chuàng)建后從父進(jìn)程調(diào)用的函數(shù)。
- <after_in_child> 是從子進(jìn)程調(diào)用的函數(shù)逮矛。
- 只有當(dāng)控件預(yù)期返回到Python解釋器時(shí)鸡号,才會(huì)進(jìn)行這些調(diào)用。
- 只能在Unix系統(tǒng)使用须鼎。
>>>def show(): >>> print('here before fork') >>>os.register_at_fork(before=show) >>>pid = os.fork() # 用fork創(chuàng)造進(jìn)程時(shí)觸發(fā)show() here before fork
163)os.spawn(<mode>, <path>, ...)
- 執(zhí)行一個(gè)外部程序并產(chǎn)生一個(gè)子進(jìn)程鲸伴。
- <path>是可執(zhí)行文件的路徑。
- <path>參數(shù)后可以增加執(zhí)行參數(shù)
- <mode>可以包含以下參數(shù):
參數(shù) 作用 os.P_NOWAIT 調(diào)用外部程序后函數(shù)本身不會(huì)等待晋控,將會(huì)立即返回汞窗,代碼繼續(xù)執(zhí)行。 os.P_NOWAITO 調(diào)用外部程序后函數(shù)本身不會(huì)等待赡译,將會(huì)立即返回仲吏,代碼繼續(xù)執(zhí)行。 os.P_WAIT 調(diào)用外部程序后函數(shù)等待程序執(zhí)行結(jié)束才會(huì)返回繼續(xù)蝌焚。 os.P_DETACH 與P_NOWAIT很相似裹唆,但是新的線程會(huì)脫離所調(diào)用的控制臺(tái)(也就是說新的程序?qū)⒉粫?huì)通過當(dāng)前的控制臺(tái)來輸出)。 os.P_OVERLAY 當(dāng)前線程將會(huì)被替換成新的線程只洒,這意味著spawn*函數(shù)將一直不返回品腹。
- os.spawn家族包括以下成員:
成員 特點(diǎn) os.spawnl(mode, path, args*) 調(diào)用的參數(shù)通過列表對(duì)象進(jìn)行傳入。 os.spawnle(mode, path, args*, env) 調(diào)用的參數(shù)通過列表對(duì)象進(jìn)行傳入,所調(diào)用的程序的環(huán)境變量可以通過env參數(shù)來指定红碑。 os.spawnlp(mode, file, args*) 調(diào)用的參數(shù)通過列表對(duì)象進(jìn)行傳入,外部程序的文件本體將從系統(tǒng)PATH中進(jìn)行尋找。 os.spawnlpe(mode, file, args*, env) 調(diào)用的參數(shù)通過列表對(duì)象進(jìn)行傳入,所調(diào)用的程序的環(huán)境變量可以通過env參數(shù)來指定,外部程序的文件本體將從系統(tǒng)PATH中進(jìn)行尋找。 os.spawnv(mode, path, args) 調(diào)用的參數(shù)直接傳入析珊。 os.spawnve(mode, path, args, env) 調(diào)用的參數(shù)直接傳入,所調(diào)用的程序的環(huán)境變量可以通過env參數(shù)來指定羡鸥。 os.spawnvp(mode, file, args) 調(diào)用的參數(shù)直接傳入,,外部程序的文件本體將從系統(tǒng)PATH中進(jìn)行尋找。 os.spawnvpe(mode, file, args, env) 調(diào)用的參數(shù)直接傳入,所調(diào)用的程序的環(huán)境變量可以通過env參數(shù)來指定,外部程序的文件本體將從系統(tǒng)PATH中進(jìn)行尋找忠寻。 >>>os.spawnl(os.P_NOWAIT,'test.exe','.*')
164)os.startfile(<path>, <operation>)
- 用于打開外部的程序或文件惧浴。
- 會(huì)自動(dòng)調(diào)用系統(tǒng)關(guān)聯(lián)的程序執(zhí)行文件。
- 只能在Windows系統(tǒng)下使用奕剃。
>>>os.startfile('test.txt') # 系統(tǒng)會(huì)用記事本打開文件
165)os.system(<command>)
- 用于調(diào)用外部系統(tǒng)指令衷旅。
- 返回值包括:
返回值 含義 0 代表成功 1 代表小問題 2 代表大問題 >>> os.system('ls') ~ foo.txt test test2.txt
166)os.times()
- 返回當(dāng)前全局進(jìn)程時(shí)間。
- 返回值是一個(gè)具有五個(gè)屬性的對(duì)象:
屬性 含義 user 用戶時(shí)間 system 系統(tǒng)時(shí)間 children_user 所有子進(jìn)程的用戶時(shí)間 children_system 所有子進(jìn)程的系統(tǒng)時(shí)間 elapsed 從過去的固定點(diǎn)開始的實(shí)際時(shí)間 >>> os.times() posix.times_result(user=0.02, system=0.0, children_user=0.0, children_system=0.0, elapsed=20403628.36)
167)os.wait()
- 等待子進(jìn)程的完成纵朋,并返回包含其pid和退出狀態(tài)指示的元組柿顶。
>>>import os >>>import sys >>>def child_process(): >>> '''child process''' >>> print('child process is running') >>> sys.exit(0) >>>def parent_process(): >>> '''parent process''' >>> print( 'parent process is running') >>> print( 'waiting for child process') >>> exit_stat = os.wait() >>> print("waited child process's PID = %d" % (exit_stat[0])) >>> sys.exit(0) >>>def main(): >>> '''main function''' >>> pid = os.fork() >>> if pid > 0: >>> parent_process() >>> else: >>> child_process() >>>if __name__ == '__main__': >>> main() parent process is running waiting for child process child process is running waited child process's PID = 27479
168)os.waitid(<idtype>, <id>, <options>)
- 等待一個(gè)或多個(gè)子進(jìn)程的完成。
- <idtype>影響<id>的解釋方式操软,可以是P_PID嘁锯,P_PGID或P_ALL。
- <id>指定要等待的pid聂薪。
- <options>指定要等待的子信號(hào)家乘,可以是os.WEXITED,os.WSTOPPED或os.WNOWAIT藏澳。
- 只能在Unix系統(tǒng)使用仁锯。
169)os.waitpid(<pid>, <options>)
- 等待由進(jìn)程id pid給出的子進(jìn)程的完成,并返回包含其進(jìn)程id和退出狀態(tài)指示的元組翔悠。
- 參數(shù)<options>會(huì)影響該函數(shù)的行為业崖。在默認(rèn)情況下,options的值為0凉驻。
- <options>包含:
參數(shù) 含義 os.WNOHANG 如果沒有子進(jìn)程退出腻要,則不阻塞waitpid()調(diào)用 os.WCONTINUED 如果子進(jìn)程從stop狀態(tài)變?yōu)槔^續(xù)執(zhí)行,則返回進(jìn)程自前一次報(bào)告以來的信息涝登。 os.WUNTRACED 如果子進(jìn)程被停止過而且其狀態(tài)信息還沒有報(bào)告過雄家,則報(bào)告子進(jìn)程的信息。
- 返回值包含(同樣適用system()和wait()):
返回值 含義 os.WCOREDUMP(status) 如果一個(gè)core文件被創(chuàng)建胀滚,則返回True趟济,否則返回False。 os.WIFCONTINUED(status) 如果一個(gè)進(jìn)程被停止過咽笼,并且繼續(xù)執(zhí)行顷编,則返回True,否則返回False剑刑。 os.WIFSTOPPED(status) 如果子進(jìn)程被停止過媳纬,則返回True双肤,否則返回False。 os.WIFSIGNALED(status) 如果進(jìn)程由于信號(hào)而退出钮惠,則返回True茅糜,否則返回False。 os.WIFEXITED(status) 如果進(jìn)程是以exit()方式退出的素挽,則返回True蔑赘,否則返回False。 os.WEXITSTATUS(status) 如果WIFEXITED(status)返回True预明,則返回一個(gè)整數(shù)缩赛,該整數(shù)是exit()調(diào)用的參數(shù)。否則返回值是未定義的撰糠。 os.WSTOPSIG(status) 返回導(dǎo)致進(jìn)程停止的信號(hào) os.WTERMSIG(status) 返回導(dǎo)致進(jìn)程退出的信號(hào) 170)os.wait3(<options>)
- 等待由進(jìn)程id pid給出的子進(jìn)程的完成酥馍,類似于waitpid()。
- 沒有給出進(jìn)程id參數(shù)窗慎,并返回子進(jìn)程id物喷。
- 退出狀態(tài)指示和資源使用信息的3元素元組。
- 只能在Unix系統(tǒng)使用遮斥。
171)os.wait4(<pid>,<options>)
- 等待由進(jìn)程id pid給出的子進(jìn)程的完成峦失,類似于waitpid()。
- 返回子進(jìn)程id术吗。
- 退出狀態(tài)指示和資源使用信息的3元素元組尉辑。
- 只能在Unix系統(tǒng)使用。
5. 調(diào)度器接口
- 調(diào)度器函數(shù)控制操作系統(tǒng)如何為進(jìn)程分配CPU時(shí)間较屿。
- 只在部分UNIX平臺(tái)上可用隧魄。
172) os.sched_get_priority_min(<policy>)
- 獲取策略的最低優(yōu)先級(jí)值。
- <policy>可以是:
策略 含義 os.SCHED_OTHER 默認(rèn)的調(diào)度策略隘蝎。對(duì)應(yīng)0购啄。 os.SCHED_BATCH 用于 CPU 密集型進(jìn)程的調(diào)度策略,它會(huì)盡量為計(jì)算機(jī)中的其余任務(wù)保留交互性嘱么。對(duì)應(yīng)3狮含。 os.SCHED_IDLE 用于極低優(yōu)先級(jí)的后臺(tái)任務(wù)的調(diào)度策略。對(duì)應(yīng)5曼振。 os.SCHED_SPORADIC 用于偶發(fā)型服務(wù)程序的調(diào)度策略几迄。 os.SCHED_FIFO 先進(jìn)先出的調(diào)度策略。對(duì)應(yīng)1冰评。 os.SCHED_RR 循環(huán)式的調(diào)度策略映胁。對(duì)應(yīng)2。 os.SCHED_RESET_ON_FORK 此旗標(biāo)可與任何其他調(diào)度策略進(jìn)行 OR 運(yùn)算甲雅。 當(dāng)帶有此旗標(biāo)的進(jìn)程設(shè)置分叉時(shí)解孙,其子進(jìn)程的調(diào)度策略和優(yōu)先級(jí)會(huì)被重置為默認(rèn)值坑填。 >>> os.sched_get_priority_min(os.SCHED_RR) 1
173) os.sched_get_priority_min(<policy>)
- 獲取策略的最大優(yōu)先級(jí)值。
- <policy>同上妆距。
>>> os.sched_get_priority_max(os.SCHED_RR) 99
174) os.sched_setscheduler(<pid>, <policy>, <param>)
- 為PID <pid>的進(jìn)程設(shè)置調(diào)度策略穷遂。
- <pid>為0表示調(diào)用進(jìn)程。
- <policy>同上是上面的調(diào)度策略常量之一娱据。
- <param>是一個(gè)sched_param實(shí)例。
175)os.sched_getscheduler(<pid>)
- 返回PID<pid>的進(jìn)程的調(diào)度策略盅惜。
- <pid>為0表示調(diào)用進(jìn)程中剩。
- <policy>同上。
>>> os.sched_getscheduler(0) 0
176)os.sched_setparam(<pid>, <param>)
- 使用PID <pid>設(shè)置進(jìn)程的調(diào)度參數(shù)抒寂。
- <pid>為0表示調(diào)用進(jìn)程结啼。
- <param>是一個(gè)sched_param實(shí)例。
177)os.sched_getparam(<pid>)
- 將調(diào)度參數(shù)作為PID <pid>的進(jìn)程的sched_param實(shí)例返回屈芜。
- <pid>為0表示調(diào)用進(jìn)程郊愧。
>>> os.sched_getparam(10) posix.sched_param(sched_priority=99)
178)os.sched_rr_get_interval(<pid>)
- 返回PID為<pid>的進(jìn)程的循環(huán)量(以秒為單位)。
- <pid>為0表示調(diào)用進(jìn)程井佑。
>>> os.sched_rr_get_interval(0) 0.0
179)os.sched_yield()
- 自愿放棄CPU属铁。
>>> os.sched_yield()
180)os.sched_setaffinity(<pid>, <mask>)
- 使用PID<pid>將進(jìn)程限制一組CPU。
- <mask>是表示應(yīng)該限制進(jìn)程的CPU集合的整數(shù)的迭代躬翁。
181)os.sched_getaffinity(<pid>)
- 返回<pid>進(jìn)程被限制的CPU集合焦蘑。
>>> os.sched_getaffinity(10) {0}
6. 雜項(xiàng)系統(tǒng)信息
182)os.confstr(<name>)
- 用來獲得字符串變量配置的屬性值。
- 只在部分UNIX平臺(tái)上可用盒发。
>>> os.confstr('CS_GNU_LIBC_VERSION') 'glibc 2.23'
183)os.confstr_names
- 返回主機(jī)操作系統(tǒng)已知的名稱是 confstr_names 字典的鍵例嘱。
- 只在部分UNIX平臺(tái)上可用。
>>> os.confstr_names {'CS_GNU_LIBC_VERSION': 2, 'CS_GNU_LIBPTHREAD_VERSION': 3, 'CS_LFS64_CFLAGS': 1004, 'CS_LFS64_LDFLAGS': 1005, 'CS_LFS64_LIBS': 1006, 'CS_LFS64_LINTFLAGS': 1007, 'CS_LFS_CFLAGS': 1000, 'CS_LFS_LDFLAGS': 1001, 'CS_LFS_LIBS': 1002, 'CS_LFS_LINTFLAGS': 1003, 'CS_PATH': 0, 'CS_XBS5_ILP32_OFF32_CFLAGS': 1100, 'CS_XBS5_ILP32_OFF32_LDFLAGS': 1101, 'CS_XBS5_ILP32_OFF32_LIBS': 1102, 'CS_XBS5_ILP32_OFF32_LINTFLAGS': 1103, 'CS_XBS5_ILP32_OFFBIG_CFLAGS': 1104, 'CS_XBS5_ILP32_OFFBIG_LDFLAGS': 1105, 'CS_XBS5_ILP32_OFFBIG_LIBS': 1106, 'CS_XBS5_ILP32_OFFBIG_LINTFLAGS': 1107, 'CS_XBS5_LP64_OFF64_CFLAGS': 1108, 'CS_XBS5_LP64_OFF64_LDFLAGS': 1109, 'CS_XBS5_LP64_OFF64_LIBS': 1110, 'CS_XBS5_LP64_OFF64_LINTFLAGS': 1111, 'CS_XBS5_LPBIG_OFFBIG_CFLAGS': 1112, 'CS_XBS5_LPBIG_OFFBIG_LDFLAGS': 1113, 'CS_XBS5_LPBIG_OFFBIG_LIBS': 1114, 'CS_XBS5_LPBIG_OFFBIG_LINTFLAGS': 1115}
184)os.cpu_count()
- 返回系統(tǒng)中的CPU數(shù)宁舰。
>>>os.cpu_count() 8
185)os.getloadavg()
- 獲取系統(tǒng)的平衡負(fù)載拼卵。
- 如果無法獲取負(fù)載平均值,則返回在最近1,5和15分鐘內(nèi)平均的系統(tǒng)運(yùn)行隊(duì)列中的進(jìn)程數(shù)或引發(fā)OSError蛮艰。
- 只能在UNIX平臺(tái)使用腋腮。
>>> os.getloadavg() (0.12, 0.05, 0.01)
186)os.sysconf(<name>)
- 返回一個(gè)系統(tǒng)配置變量的整數(shù)值。
- <name>是系統(tǒng)配置變量名稱印荔,可以在os. sysconf_names中找到低葫。
- 只能在UNIX平臺(tái)使用。
>>> os.sysconf('SC_2_C_VERSION') 200809
187)os.sysconf_names
- 返回系統(tǒng)配置變量對(duì)應(yīng)sysconf()整數(shù)值的字典仍律。
>>> os. sysconf_names {'SC_2_CHAR_TERM': 95, 'SC_2_C_BIND': 47, 'SC_2_C_DEV': 48, 'SC_2_C_VERSION': 96, 'SC_2_FORT_DEV': 49, 'SC_2_FORT_RUN': 50, 'SC_2_LOCALEDEF': 52, 'SC_2_SW_DEV': 51, 'SC_2_UPE': 97, 'SC_2_VERSION': 46, 'SC_AIO_LISTIO_MAX': 23, 'SC_AIO_MAX': 24, 'SC_AIO_PRIO_DELTA_MAX': 25, 'SC_ARG_MAX': 0, 'SC_ASYNCHRONOUS_IO': 12, 'SC_ATEXIT_MAX': 87, 'SC_AVPHYS_PAGES': 86, 'SC_BC_BASE_MAX': 36, 'SC_BC_DIM_MAX': 37, 'SC_BC_SCALE_MAX': 38, 'SC_BC_STRING_MAX': 39, 'SC_CHARCLASS_NAME_MAX': 45, 'SC_CHAR_BIT': 101, 'SC_CHAR_MAX': 102, 'SC_CHAR_MIN': 103, 'SC_CHILD_MAX': 1, 'SC_CLK_TCK': 2, 'SC_COLL_WEIGHTS_MAX': 40, 'SC_DELAYTIMER_MAX': 26, 'SC_EQUIV_CLASS_MAX': 41, 'SC_EXPR_NEST_MAX': 42, 'SC_FSYNC': 15, 'SC_GETGR_R_SIZE_MAX': 69, 'SC_GETPW_R_SIZE_MAX': 70, 'SC_INT_MAX': 104, 'SC_INT_MIN': 105, 'SC_IOV_MAX': 60, 'SC_JOB_CONTROL': 7, 'SC_LINE_MAX': 43, 'SC_LOGIN_NAME_MAX': 71, 'SC_LONG_BIT': 106, 'SC_MAPPED_FILES': 16, 'SC_MB_LEN_MAX': 108, 'SC_MEMLOCK': 17, 'SC_MEMLOCK_RANGE': 18, 'SC_MEMORY_PROTECTION': 19, 'SC_MESSAGE_PASSING': 20, 'SC_MQ_OPEN_MAX': 27, 'SC_MQ_PRIO_MAX': 28, 'SC_NGROUPS_MAX': 3, 'SC_NL_ARGMAX': 119, 'SC_NL_LANGMAX': 120, 'SC_NL_MSGMAX': 121, 'SC_NL_NMAX': 122, 'SC_NL_SETMAX': 123, 'SC_NL_TEXTMAX': 124, 'SC_NPROCESSORS_CONF': 83, 'SC_NPROCESSORS_ONLN': 84, 'SC_NZERO': 109, 'SC_OPEN_MAX': 4, 'SC_PAGESIZE': 30, 'SC_PAGE_SIZE': 30, 'SC_PASS_MAX': 88, 'SC_PHYS_PAGES': 85, 'SC_PII': 53, 'SC_PII_INTERNET': 56, 'SC_PII_INTERNET_DGRAM': 62, 'SC_PII_INTERNET_STREAM': 61, 'SC_PII_OSI': 57, 'SC_PII_OSI_CLTS': 64, 'SC_PII_OSI_COTS': 63, 'SC_PII_OSI_M': 65, 'SC_PII_SOCKET': 55, 'SC_PII_XTI': 54, 'SC_POLL': 58, 'SC_PRIORITIZED_IO': 13, 'SC_PRIORITY_SCHEDULING': 10, 'SC_REALTIME_SIGNALS': 9, 'SC_RE_DUP_MAX': 44, 'SC_RTSIG_MAX': 31, 'SC_SAVED_IDS': 8, 'SC_SCHAR_MAX': 111, 'SC_SCHAR_MIN': 112, 'SC_SELECT': 59, 'SC_SEMAPHORES': 21, 'SC_SEM_NSEMS_MAX': 32, 'SC_SEM_VALUE_MAX': 33, 'SC_SHARED_MEMORY_OBJECTS': 22, 'SC_SHRT_MAX': 113, 'SC_SHRT_MIN': 114, 'SC_SIGQUEUE_MAX': 34, 'SC_SSIZE_MAX': 110, 'SC_STREAM_MAX': 5, 'SC_SYNCHRONIZED_IO': 14, 'SC_THREADS': 67, 'SC_THREAD_ATTR_STACKADDR': 77, 'SC_THREAD_ATTR_STACKSIZE': 78, 'SC_THREAD_DESTRUCTOR_ITERATIONS': 73, 'SC_THREAD_KEYS_MAX': 74, 'SC_THREAD_PRIORITY_SCHEDULING': 79, 'SC_THREAD_PRIO_INHERIT': 80, 'SC_THREAD_PRIO_PROTECT': 81, 'SC_THREAD_PROCESS_SHARED': 82, 'SC_THREAD_SAFE_FUNCTIONS': 68, 'SC_THREAD_STACK_MIN': 75, 'SC_THREAD_THREADS_MAX': 76, 'SC_TIMERS': 11, 'SC_TIMER_MAX': 35, 'SC_TTY_NAME_MAX': 72, 'SC_TZNAME_MAX': 6, 'SC_T_IOV_MAX': 66, 'SC_UCHAR_MAX': 115, 'SC_UINT_MAX': 116, 'SC_UIO_MAXIOV': 60, 'SC_ULONG_MAX': 117, 'SC_USHRT_MAX': 118, 'SC_VERSION': 29, 'SC_WORD_BIT': 107, 'SC_XBS5_ILP32_OFF32': 125, 'SC_XBS5_ILP32_OFFBIG': 126, 'SC_XBS5_LP64_OFF64': 127, 'SC_XBS5_LPBIG_OFFBIG': 128, 'SC_XOPEN_CRYPT': 92, 'SC_XOPEN_ENH_I18N': 93, 'SC_XOPEN_LEGACY': 129, 'SC_XOPEN_REALTIME': 130, 'SC_XOPEN_REALTIME_THREADS': 131, 'SC_XOPEN_SHM': 94, 'SC_XOPEN_UNIX': 91, 'SC_XOPEN_VERSION': 89, 'SC_XOPEN_XC
188)os.curdir
- 返回操作系統(tǒng)當(dāng)前地址的字符串,通常是'.'麸拄。
>>> os.curdir '.'
189)os.pardir
- 返回操作系統(tǒng)當(dāng)前地址的上一級(jí)菜單,通常是'..'姥宝。
>>>os.pardir '..'
190)os.sep
- 表示系統(tǒng)默認(rèn)的分隔符,Windows下是'\',Linux下是'/'
>>> os.sep '/'
191)os.altsep
- 操作系統(tǒng)用于分隔路徑名組件的備用字符,Windows下位是'/'窒盐。
- 如果只有一個(gè)分隔符字符,則None钢拧。
>>>os.altsep '/'
192)os.extsep
- 將基本文件名與擴(kuò)展名分隔開的字符蟹漓。
>>> os.extsep '.'
193)os.pathsep
- 操作系統(tǒng)的地址分隔符。
- 例如在Windows下是‘;’源内,Linux下是':'
>>> os.pathsep ':'
194)os.defpath
- 當(dāng)使用exec函數(shù)族的時(shí)候葡粒,如果沒有指定PATH環(huán)境變量,則默認(rèn)會(huì)查找os.defpath中的值作為子進(jìn)程PATH的值膜钓。
>>> os.defpath '/bin:/usr/bin'
195)os.linesep
- 返回當(dāng)年系統(tǒng)中的換行符嗽交。
- 比如在Windows中是'\r\n',Linux中是'\n'。
>>> os.linesep '\n'
196)os.devnull
- 返回不同系統(tǒng)中的空設(shè)備路徑颂斜。
- 比如在Windows中是'nul',Linux中是'/dev/null'夫壁。
>>> os.devnull '/dev/null'
7. 隨機(jī)數(shù)
- 這里的與random()函數(shù)不同,主要是字節(jié)操作沃疮。
197)os.getrandom(<size>, <flags=0>)
- 等概率獲得隨機(jī)字節(jié),最大為<size>盒让。
- 該函數(shù)返回的字節(jié)數(shù)少于請(qǐng)求的字節(jié)數(shù)。
- <flags>可以是
參數(shù) 含義 os.GRND_NONBLOCK 非阻塞模式 os.GRND_RANDOM 隨機(jī)字節(jié)從/dev/random池中獲取司蔬,而不是/dev/urandom池邑茄。
- 只能在Linux3.17以上使用
198)os.urandom(<size>)
- 返回一個(gè)<size>個(gè)字節(jié)長的string,適合用于加密葱她。
>>> os.urandom(8) b'\xa5\xb8.6%\xceu\xa8'
三撩扒、os.path的相關(guān)方法
- os.path 模塊主要用于文件路徑的常用操作。
199)os.path.abspath(<path>)
- 返回路徑<path>的絕對(duì)路徑
>>> os.path.abspath('test.txt') '/home/ubuntu/test.txt'
200)os.path.basename(<path>)
- 返回文件的文件名吨些。(去掉路徑名)
>>> os.path.basename('test.txt') 'test.txt'
201)os.path.commonpath(<path>)
- 返回路徑列表中所有路徑名的最長公共子路徑搓谆。
>>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) '/usr'
202)os.path.commonprefix(<list>)
- 返回路徑列表中所有路徑名的最長公共子路徑。(逐字符比較)
- 由于是逐字符比較豪墅,所有有可能返回?zé)o效路徑泉手。
>>>os.path.commonprefix(['c:/users/xiaors', 'c:/users/xiaoshimei']) 'c:/users/xiao'
203)os.path.dirname(<path>)
- 返回路徑<path>的目錄名稱。(不包含文件名)
>>> os.path.dirname('test.txt') ''
204)os.path.exists(<path>)
- 判斷文件<path>是否存在偶器。
- 在某些平臺(tái)上斩萌,如果使用 os.stat() 查詢到目標(biāo)文件沒有執(zhí)行權(quán)限,會(huì)直接返回False屏轰。
>>> os.path.exists('c:/some/file/not/exists') False
205)os.path.lexists(<path>)
- 判斷文件<path>是否存在颊郎。
- 即使 os.stat() 查詢到目標(biāo)文件沒有執(zhí)行權(quán)限,也會(huì)返回True霎苗。
>>> os.path.exists('/usr') True
206)os.path.expanduser(<path>)
- 將<path>參數(shù)中開頭部分的 ~ 或 ~user 替換為當(dāng)前 用戶 的Home目錄并返回姆吭。
>>> os.path.expanduser('~/test.txt') '/home/ubuntu/test.txt'
207)os.path.expandvars(<path>)
- 將<path>參數(shù)中$name或者${name}的部分被替換成環(huán)境變量name的值。
>>> path = '/home/ubuntu/test.txt' >>> os.path.expandvars('$PATH') '/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/anaconda3/condabin:/home/ubuntu/anaconda3/bin:/home/ubuntu/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
208)os.path.getatime(<path>)
- 返回 <path> 的最后訪問時(shí)間唁盏。
- 返回值為紀(jì)元秒數(shù)内狸。
>>> os.path.getatime('test.txt') 1575375189.990112
209)os.path.getmtime(<path>)
- 返回 <path> 的最后修改時(shí)間检眯。
- 返回值為紀(jì)元秒數(shù)。
>>> os.path.getmtime('test.txt') 1575375205.9901018
210)os.path.getctime(<path>)
- 返回 <path> 元數(shù)據(jù)的最后修改時(shí)間或path創(chuàng)建時(shí)間昆淡。
- 返回值為紀(jì)元秒數(shù)锰瘸。
>>> os.path.getctime('test.txt') 1575375205.9901018
211)os.path.getsize(<path>)
- 返回 path 的大小,以字節(jié)為單位昂灵。
>>> os.path.getsize('test.txt') 11
212)os.path.isabs(<path>)
- 判斷<path>是否是絕對(duì)路徑避凝。
>>> os.path.isabs('test.txt') False >>> os.path.isabs('/home/ubuntu/test.txt') True
213)os.path.isfile(<path>)
- 判斷<path>是否是現(xiàn)有的常規(guī)文件。
>>>os.path.isfile('test.txt') True
214)os.path.isdir(<path>)
- 判斷<path>是否是現(xiàn)有的目錄眨补。
>>> os.path.isdir('/home/ubuntu') # 真路徑 True >>> os.path.isdir('/home/abuntu') # 假路徑 False
215)os.path.islink(<path>)
- 判斷<path>是否是軟鏈接恕曲。
>>> os.path.islink('/home/ubuntu/test.txt') False
216)os.path.ismount(<path>)
- 判斷<path>是否存在且為一個(gè)掛載點(diǎn)(比如光盤)。
>>> os.path.ismount( "/mnt/cdrom" ) # 光盤放在cdrom中 True >>> os.path.ismount( "/mnt/cdrom" ) # 光盤不在cdrom中 False
217)os.path.join(<path>, <paths>)
- 合理地拼接一個(gè)或多個(gè)路徑部分渤涌。
>>> os.path.join('c:','user','filename.exe') 'c:/user/filename.exe'
218)os.path.normcase(<path>)
- 規(guī)范路徑的大小寫。
>>>os.path.normcase('C:/AbC/EFg/tEST.tXT') 'c:\\abc\\efg\\test.txt'
219)os.path.normpath(<path>)
- 通過折疊多余的分隔符和對(duì)上級(jí)目錄的引用來標(biāo)準(zhǔn)化路徑名把还。
>>>os.path.normpath('c://abc/../def///test.txt') 'c:\\def\\test.txt'
220)os.path.realpath(<path>)
- 返回指定文件的規(guī)范路徑实蓬,消除路徑中存在的任何符號(hào)鏈接。
>>>os.path.realpath('c://abc/../def///test.txt') 'c:\\def\\test.txt'
221)os.path.relpath(<path>, <start=os.curdir>)
- 返回從<start>目錄到達(dá) <path>目錄 之間要經(jīng)過的相對(duì)路徑吊履。
>>>os.path.relpath('c:\\user\\xiaorans') # 當(dāng)前目錄在c:\ '..\\..\\user\\xiaorans'
222)os.path.samefile(<path1>, <path2>)
- 判斷兩個(gè)路徑是否都指向相同的文件或目錄安皱。
>>> os.path.samefile('test.txt','/home/ubuntu/test.txt') True
223)os.path.sameopenfile(<fp1>, <fp2>)
- 判斷兩個(gè)路徑是否都指向相同的文件描述符。
>>> import os >>> file1 = os.open('test1.txt',os.O_RDONLY) >>> file2 = os.open('test1.txt',os.O_RDONLY) >>> os.path.sameopenfile(file1,file2) True
224)os.path.samestat(<stat1>, <stat2>)
- 判斷stat 元組 <stat1> 和 <stat2> 是否指向相同文件艇炎。
>>> a = os.stat('test.txt') >>> b = os.stat('test.txt') >>> os.path.samestat(a,b) True
225)os.path.split(<path>)
- 將路徑 <path> 拆分為元組酌伊,路徑和文件名。
>>>os.path.split(os.path.abspath('test.txt')) ('C:\\Users\\xiaor', 'test.txt')
226)os.path.splitdrive(<path>)
- 將路徑<path>拆分為文組缀踪,盤符和剩余部分居砖。
os.path.splitdrive(os.path.abspath('test.txt')) ('C:', '\\Users\\xiaor\\test.txt')
227)os.path.splitext(<path>)
- 將<path>拆分為文件名后綴和剩余部分。
>>>os.path.splitext(os.path.abspath('test.txt')) ('C:\\Users\\xiaor\\test', '.txt')
228)os.path.supports_unicode_filenames
- 如果當(dāng)前操作系統(tǒng)允許將任意 Unicode 字符串用作文件名驴娃,則為 True奏候。
>>>os.path.supports_unicode_filenames # Windows系統(tǒng)下 True >>>os.path.supports_unicode_filenames # Linux系統(tǒng)下 False
參考資料
- https://www.runoob.com 菜鳥教程
- http://www.tulingxueyuan.com/ 北京圖靈學(xué)院
- http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 兩點(diǎn)水
- https://blog.csdn.net/weixin_44213550/article/details/91346411 python老菜鳥
- https://realpython.com/python-string-formatting/ Dan Bader
- https://www.liaoxuefeng.com/ 廖雪峰
- https://blog.csdn.net/Gnewocean/article/details/85319590 新海說
- 《Python學(xué)習(xí)手冊(cè)》Mark Lutz
- 《Python編程 從入門到實(shí)踐》Eric Matthes
本文作者:大師兄(superkmi)