大師兄的Python學(xué)習(xí)筆記(五): 常用庫之os包

大師兄的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

參考資料



本文作者:大師兄(superkmi)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唇敞,隨后出現(xiàn)的幾起案子蔗草,更是在濱河造成了極大的恐慌,老刑警劉巖疆柔,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咒精,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旷档,警方通過查閱死者的電腦和手機(jī)模叙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彬犯,“玉大人向楼,你說我怎么就攤上這事查吊。” “怎么了湖蜕?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵逻卖,是天一觀的道長。 經(jīng)常有香客問我昭抒,道長评也,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任灭返,我火速辦了婚禮盗迟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熙含。我一直安慰自己罚缕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布怎静。 她就那樣靜靜地躺著邮弹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚓聘。 梳的紋絲不亂的頭發(fā)上腌乡,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音夜牡,去河邊找鬼与纽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛塘装,可吹牛的內(nèi)容都是我干的急迂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼氢哮,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼袋毙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冗尤,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤听盖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后裂七,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皆看,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年背零,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腰吟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毛雇,靈堂內(nèi)的尸體忽然破棺而出嫉称,到底是詐尸還是另有隱情,我是刑警寧澤灵疮,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布织阅,位于F島的核電站,受9級(jí)特大地震影響震捣,放射性物質(zhì)發(fā)生泄漏荔棉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一蒿赢、第九天 我趴在偏房一處隱蔽的房頂上張望润樱。 院中可真熱鬧,春花似錦羡棵、人聲如沸壹若。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舌稀。三九已至,卻和暖如春灼擂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背觉至。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工剔应, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人语御。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓峻贮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親应闯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纤控,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容