os --- 操作系統(tǒng)接口模塊?
源代碼: Lib/os.py
該模塊提供了一些方便使用操作系統(tǒng)相關(guān)功能的函數(shù)。 如果你是想讀寫一個文件,請參閱 open(),如果你想操作路徑,請參閱 os.path 模塊,如果你想在命令行上讀取所有文件中的所有行請參閱 fileinput 模塊。 有關(guān)創(chuàng)建臨時文件和目錄的方法,請參閱 tempfile 模塊,對于高級文件目錄處理,請參閱 shutil 模塊。
關(guān)于這些函數(shù)的適用性的說明:
所有 Python 內(nèi)建的操作系統(tǒng)相關(guān)的模塊的設(shè)計都是為了使得在同一功能可用的情況下,保持接口的一致性;例如,函數(shù)
os.stat(path)以相同的格式返回關(guān)于 path 的統(tǒng)計信息(這個函數(shù)同時也是起源于 POSIX 接口)。針對特定的操作的拓展同樣在可用于
os模塊,但是使用它們必然會對可移植性產(chǎn)生威脅。所有接受路徑或文件名的函數(shù)都同時支持字節(jié)串和字符串對象,并在返回路徑或文件名時使用相應(yīng)類型的對象作為結(jié)果。
注解
如果使用無效或無法訪問的文件名與路徑,或者其他類型正確但操作系統(tǒng)不接受的參數(shù),此模塊的所有函數(shù)都拋出 OSError (或者它的子類)。
-
os.name? 導(dǎo)入的依賴特定操作系統(tǒng)的模塊的名稱。以下名稱目前已注冊:
'posix','nt','java'.
文件名,命令行參數(shù),以及環(huán)境變量。?
在 Python 中,使用字符串類型表示文件名、命令行參數(shù)和環(huán)境變量。 在某些系統(tǒng)上,在將這些字符串傳遞給操作系統(tǒng)之前,必須將這些字符串解碼為字節(jié)。 Python 使用文件系統(tǒng)編碼來執(zhí)行此轉(zhuǎn)換(請參閱 sys.getfilesystemencoding() )。
在 3.1 版更改: 在某些系統(tǒng)上,使用文件系統(tǒng)編碼進行轉(zhuǎn)換可能會失敗。 在這種情況下,Python 會使用 代理轉(zhuǎn)義編碼錯誤處理器,這意味著在解碼時,不可解碼的字節(jié)被 Unicode 字符 U+DCxx 替換,并且這些字節(jié)在編碼時再次轉(zhuǎn)換為原始字節(jié)。
文件系統(tǒng)編碼必須保證成功解碼小于 128 的所有字節(jié)。如果文件系統(tǒng)編碼無法提供此保證, API 函數(shù)可能會引發(fā) UnicodeErrors 。
進程參數(shù)?
這些函數(shù)和數(shù)據(jù)項提供了操作當前進程和用戶的信息。
-
os.environ? 一個表示字符串環(huán)境的 mapping 對象。 例如,
environ['HOME']是你的主目錄(在某些平臺上)的路徑名,相當于 C 中的getenv("HOME")。這個映射是在第一次導(dǎo)入
os模塊時捕獲的,通常作為 Python 啟動時處理site.py的一部分。除了通過直接修改os.environ之外,在此之后對環(huán)境所做的更改不會反映在os.environ中。如果平臺支持
putenv()函數(shù),這個映射除了可以用于查詢環(huán)境外還能用于修改環(huán)境。 當這個映射被修改時,putenv()將被自動調(diào)用。在Unix系統(tǒng)上,鍵和值會使用
sys.getfilesystemencoding()和'surrogateescape'的錯誤處理。如果你想使用其他的編碼,使用environb。注解
直接調(diào)用
putenv()并不會影響os.environ,所以推薦直接修改``os.environ``。注解
在某些平臺上,包括 FreeBSD 和 Mac OS X,設(shè)置
environ可能導(dǎo)致內(nèi)存泄露。參閱putenv()的系統(tǒng)文檔。如果平臺沒有提供
putenv(), 為了使啟動的子進程使用修改后的環(huán)境,一份修改后的映射會被傳給合適的進程創(chuàng)建函數(shù)。如果平臺支持
unsetenv()函數(shù),你可以通過刪除映射中元素的方式來刪除對應(yīng)的環(huán)境變量。當一個元素被從os.environ刪除時,以及pop()或clear()被調(diào)用時,unsetenv()會被自動調(diào)用。
-
os.environb? 字節(jié)版本的
environ: 一個以字節(jié)串表示環(huán)境的 mapping 對象。environ和environb是同步的(修改environb會更新environ,反之亦然)。只有在
supports_bytes_environ為True的時候environb才是可用的。3.2 新版功能.
-
os.chdir(path) -
os.fchdir(fd) -
os.getcwd() 以上函數(shù)請參閱 文件和目錄 。
-
os.fsencode(filename)? 編碼 路徑類 文件名 為文件系統(tǒng)接受的形式,使用
'surrogateescape'代理轉(zhuǎn)義編碼錯誤處理器,在Windows系統(tǒng)上會使用'strict';返回bytes字節(jié)類型不變。fsdecode()是此函數(shù)的逆向函數(shù)。3.2 新版功能.
在 3.6 版更改: 增加對實現(xiàn)了
os.PathLike接口的對象的支持。
-
os.fsdecode(filename)? 從文件系統(tǒng)編碼方式解碼為 路徑類 文件名,使用
'surrogateescape'代理轉(zhuǎn)義編碼錯誤處理器,在Windows系統(tǒng)上會使用'strict';返回str字符串不變。fsencode()是此函數(shù)的逆向函數(shù)。3.2 新版功能.
在 3.6 版更改: 增加對實現(xiàn)了
os.PathLike接口的對象的支持。
-
os.fspath(path)? 返回路徑的文件系統(tǒng)表示。
如果傳入的是
str或bytes類型的字符串,將原樣返回。否則__fspath__()將被調(diào)用,如果得到的是一個str或bytes類型的對象,那就返回這個值。其他所有情況則會拋出TypeError? 異常。3.6 新版功能.
-
class
os.PathLike? 描述表示一個文件系統(tǒng)路徑的 abstract base class ,如
pathlib.PurePath。3.6 新版功能.
-
os.getenv(key, default=None)? 如果存在,返回環(huán)境變量 key 的值,否則返回 default。 key , default 和返回值均為 str 字符串類型。
在Unix系統(tǒng)上,鍵和值會使用
sys.getfilesystemencoding()?和``'surrogateescape'`` 錯誤處理進行解碼。如果你想使用其他的編碼,使用os.getenvb()。可用性: 大部分的Unix系統(tǒng),Windows。
-
os.getenvb(key, default=None)? 如果存在環(huán)境變量 key 那么返回其值,否則返回 default。 key , default 和返回值均為bytes字節(jié)串類型。
getenvb()僅在supports_bytes_environ為True時可用。可用性: 大部分的Unix系統(tǒng)。
3.2 新版功能.
-
os.get_exec_path(env=None)? 返回將用于搜索可執(zhí)行文件的目錄列表,與在外殼程序中啟動一個進程時相似。指定的 env 應(yīng)為用于搜索 PATH 的環(huán)境變量字典。默認情況下,當 env 為
None時,將會使用environ。3.2 新版功能.
-
os.getgrouplist(user, group)? 返回該用戶所在的組 ID 列表??赡?group 參數(shù)沒有在返回的列表中,實際上用戶應(yīng)該也是屬于該 group。group 參數(shù)一般可以從儲存賬戶信息的密碼記錄文件中找到。
可用性: Unix。
3.3 新版功能.
-
os.getgroups()? 返回當前進程關(guān)聯(lián)的附加組ID列表
可用性: Unix。
注解
在Mac OS X系統(tǒng)中,
getgroups()會和其他 Unix 平臺有些不同。如果 Python 解釋器是在10.5或更早版本中部署,getgroups()返回當前用戶進程相關(guān)的有效組ID列表。 該列表長度由于系統(tǒng)預(yù)設(shè)的接口限制,最長為 16。 而且在適當?shù)臋?quán)限下,返回結(jié)果還會因getgroups()而發(fā)生變化;如果 Python 解釋器是在10.5以上版本中部署,getgroups()返回進程所屬有效用戶 ID 所對應(yīng)的用戶的組 ID 列表,組用戶列表可能因為進程的生存周期而發(fā)生變動,而且也不會因為setgroups()的調(diào)用而發(fā)生,返回的組用戶列表長度也沒有長度 16 的限制。在部署中,Python 解釋器用到的變量MACOSX_DEPLOYMENT_TARGET可以用sysconfig.get_config_var()。
-
os.getlogin()? 返回通過控制終端進程進行登錄的用戶名。在多數(shù)情況下,使用
getpass.getuser()會更有效,因為后者會通過檢查環(huán)境變量LOGNAME或USERNAME來查找用戶,再由pwd.getpwuid(os.getuid())[0]來獲取當前用戶 ID 的登錄名。可用性: Unix, Windows。
-
os.getpid()? 返回當前進程ID
-
os.getppid()? 返回父進程ID。當父進程已經(jīng)結(jié)束,在Unix中返回的ID是初始進程(1)中的一個,在Windows中仍然是同一個進程ID,該進程ID有可能已經(jīng)被進行進程所占用。
可用性: Unix, Windows。
在 3.2 版更改: 添加WIndows的支持。
-
os.getpriority(which, who)? 獲取程序調(diào)度優(yōu)先級。which 參數(shù)值可以是
PRIO_PROCESS,PRIO_PGRP,或PRIO_USER中的一個,who 是相對于 which (PRIO_PROCESS的進程標識符,PRIO_PGRP的進程組標識符和PRIO_USER的用戶ID)。當 who 為 0 時(分別)表示調(diào)用的進程,調(diào)用進程的進程組或調(diào)用進程所屬的真實用戶 ID。可用性: Unix。
3.3 新版功能.
-
os.PRIO_PROCESS? -
os.PRIO_PGRP? -
os.PRIO_USER? 函數(shù)
getpriority()和setpriority()的參數(shù)。可用性: Unix。
3.3 新版功能.
-
os.initgroups(username, gid)? 調(diào)用系統(tǒng) initgroups(),使用指定用戶所在的所有值來初始化組訪問列表,包括指定的組ID。
可用性: Unix。
3.2 新版功能.
-
os.putenv(key, value)? 將名為 key 的環(huán)境變量值設(shè)置為 value。該變量名修改會影響由
os.system(),popen(),fork()和execv()發(fā)起的子進程。可用性: 大部分的Unix系統(tǒng),Windows。
注解
在一些平臺,包括 FreeBSD 和 Mac OS X,設(shè)置
environ可能導(dǎo)致內(nèi)存泄露。詳情參考 putenv 相關(guān)系統(tǒng)文檔。當系統(tǒng)支持
putenv()時,os.environ中的參數(shù)賦值會自動轉(zhuǎn)換為對putenv()的調(diào)用。不過putenv()的調(diào)用不會更新os.environ,因此最好使用os.environ對變量賦值。
-
os.setgroups(groups)? 將 group 參數(shù)值設(shè)置為與當進程相關(guān)聯(lián)的附加組ID列表。group 參數(shù)必須為一個序列,每個元素應(yīng)為每個組的數(shù)字ID。該操作通常只適用于超級用戶。
可用性: Unix。
注解
在 Mac OS X 中,groups 的長度不能超過系統(tǒng)定義的最大有效組 ID 個數(shù),一般為 16。 如果它沒有返回與調(diào)用 setgroups() 所設(shè)置的相同的組列表,請參閱
getgroups()的文檔。
-
os.setpgrp()? 根據(jù)已實現(xiàn)的版本(如果有)來調(diào)用系統(tǒng)
setpgrp()或setpgrp(0, 0)。相關(guān)說明,請參考 Unix 手冊。可用性: Unix。
-
os.setpgid(pid, pgrp)? 使用系統(tǒng)調(diào)用
setpgid(),將 pid 對應(yīng)進程的組ID設(shè)置為 pgrp。相關(guān)說明,請參考 Unix 手冊。可用性: Unix。
-
os.setpriority(which, who, priority)? 設(shè)置程序調(diào)度優(yōu)先級。 which 的值為
PRIO_PROCESS,PRIO_PGRP或PRIO_USER之一,而 who 會相對于 which (PRIO_PROCESS的進程標識符,PRIO_PGRP的進程組標識符和PRIO_USER的用戶 ID) 被解析。 who 值為零 (分別) 表示調(diào)用進程,調(diào)用進程的進程組或調(diào)用進程的真實用戶 ID。 priority 是范圍在 -20 至 19 的值。 默認優(yōu)先級為 0;較小的優(yōu)先級數(shù)值會更優(yōu)先被調(diào)度。可用性: Unix。
3.3 新版功能.
-
os.strerror(code)? 根據(jù) code 中的錯誤碼返回錯誤消息。 在某些平臺上當給出未知錯誤碼時
strerror()將返回NULL并會引發(fā)ValueError。
-
os.supports_bytes_environ? 如果操作系統(tǒng)上原生環(huán)境類型是字節(jié)型則為
True(例如在 Windows 上為False)。3.2 新版功能.
-
os.umask(mask)? 設(shè)定當前數(shù)值掩碼并返回之前的掩碼。
-
os.uname()? 返回當前操作系統(tǒng)的識別信息。返回值是一個有5個屬性的對象:
sysname- 操作系統(tǒng)名nodename- 機器在網(wǎng)絡(luò)上的名稱(需要先設(shè)定)release- 操作系統(tǒng)發(fā)行信息version- 操作系統(tǒng)版本信息machine- 硬件標識符
為了向后兼容,該對象也是可迭代的,像是一個按照
sysname,nodename,release,version,和machine順序組成的元組。有些系統(tǒng)會將
nodename截短為 8 個字符或截短至前綴部分;獲取主機名的一個更好方式是socket.gethostname()或甚至可以用socket.gethostbyaddr(socket.gethostname())。可用性: 較新的 Unix 版本。
在 3.3 版更改: 返回結(jié)果的類型由元組變成一個類似元組的對象,同時具有命名的屬性。
-
os.unsetenv(key)? 取消設(shè)置(刪除)名為 key 的環(huán)境變量。變量名的改變會影響由
os.system(),popen(),fork()和execv()觸發(fā)的子進程。當系統(tǒng)支持
unsetenv(),刪除在os.environ中的變量會自動轉(zhuǎn)換為對unsetenv()的調(diào)用。但是unsetenv()不能更新os.environ,因此最好直接刪除os.environ中的變量。可用性: 大部分的Unix系統(tǒng)。
創(chuàng)建文件對象?
文件描述符操作?
這些函數(shù)對文件描述符所引用的 I/O 流進行操作。
文件描述符是一些小的整數(shù),對應(yīng)于當前進程所打開的文件。例如,標準輸入的文件描述符通常是0,標準輸出是1,標準錯誤是2。之后被進程打開的文件的文件描述符會被依次指定為3,4,5等?!拔募枋龇边@個詞有點誤導(dǎo)性,在 Unix 平臺中套接字和管道也被文件描述符所引用。
當需要時,可以用 fileno() 可以獲得 file object 所對應(yīng)的文件描述符。需要注意的是,直接使用文件描述符會繞過文件對象的方法,會忽略如數(shù)據(jù)內(nèi)部緩沖等情況。
-
os.close(fd)? 關(guān)閉文件描述符 fd。
-
os.closerange(fd_low, fd_high)? 關(guān)閉從 fd_low (包括)到 fd_high (排除)間的文件描述符,并忽略錯誤。類似(但快于):
for fd in range(fd_low, fd_high): try: os.close(fd) except OSError: pass
-
os.dup(fd)? 返回一個文件描述符 fd 的副本。該文件描述符的副本是 不可繼承的。
在 Windows 中,當復(fù)制一個標準流(0: stdin, 1: stdout, 2: stderr)時,新的文件描述符是 可繼承的。
在 3.4 版更改: 新的文件描述符現(xiàn)在是不可繼承的。
-
os.dup2(fd, fd2, inheritable=True)? 把文件描述符 fd 復(fù)制為 fd2,必要時先關(guān)閉后者。返回 fd2。新的文件描述符默認是 可繼承的,除非在 inheritable 為
False時,是不可繼承的。在 3.4 版更改: 添加可選參數(shù) inheritable。
在 3.7 版更改: 成功時返回 fd2,以過去的版本中,總是返回
None。
-
os.fchmod(fd, mode)? 將 fd 指定文件的權(quán)限狀態(tài)修改為 mode??梢詤⒖?
chmod()中列出 mode 的可用值。從Python 3.3開始,這相當于os.chmod(fd, mode)。可用性: Unix。
-
os.fchown(fd, uid, gid)? 分別將 fd 指定文件的所有者和組 ID 修改為 uid 和 gid 的值。若不想變更其中的某個 ID,可將相應(yīng)值設(shè)為 -1。參考
chown()。從 Python 3.3 開始,這相當于os.chown(fd, uid, gid)。可用性: Unix。
-
os.fpathconf(fd, name)? 返回與打開的文件有關(guān)的系統(tǒng)配置信息。name 指定要查找的配置名稱,它可以是字符串,是一個系統(tǒng)已定義的名稱,這些名稱定義在不同標準(POSIX.1,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱。當前操作系統(tǒng)已定義的名稱在
pathconf_names字典中給出。對于未包含在該映射中的配置名稱,也可以傳遞一個整數(shù)作為 name。如果 name 是一個字符串且不是已定義的名稱,將拋出
ValueError異常。如果當前系統(tǒng)不支持 name 指定的配置名稱,即使該名稱存在于pathconf_names,也會拋出OSError異常,錯誤碼為errno.EINVAL。從 Python 3.3 起,此功能等價于
os.pathconf(fd, name)。可用性: Unix。
-
os.fstat(fd)? 獲取文件描述符 fd 的狀態(tài). 返回一個
stat_result對象。從 Python 3.3 起,此功能等價于
os.stat(fd)。參見
stat()函數(shù)。
-
os.fstatvfs(fd)? 返回文件系統(tǒng)的信息,該文件系統(tǒng)是文件描述符 fd 指向的文件所在的文件系統(tǒng),與
statvfs()一樣。從 Python 3.3 開始,它等效于os.statvfs(fd)。可用性: Unix。
-
os.fsync(fd)? 強制將文件描述符 fd 指向的文件寫入磁盤。在 Unix,這將調(diào)用原生
fsync()函數(shù);在 Windows,則是 MS_commit()函數(shù)。如果要寫入的是緩沖區(qū)內(nèi)的 Python 文件對象 f,請先執(zhí)行
f.flush(),然后執(zhí)行os.fsync(f.fileno()),以確保與 f 關(guān)聯(lián)的所有內(nèi)部緩沖區(qū)都寫入磁盤。可用性: Unix, Windows。
-
os.ftruncate(fd, length)? 將文件描述符 fd 對應(yīng)的文件切分開,以使其最大為 length 字節(jié)。從 Python 3.3 開始,它等效于
os.truncate(fd, length)。可用性: Unix, Windows。
在 3.5 版更改: 添加了 Windows 支持
-
os.get_blocking(fd)? 獲取文件描述符的阻塞模式:如果設(shè)置了
O_NONBLOCK標志位,返回False,如果該標志位被清除,返回True。參見
set_blocking()和socket.socket.setblocking()。可用性: Unix。
3.5 新版功能.
-
os.isatty(fd)? 如果文件描述符 fd 打開且已連接至 tty 設(shè)備(或類 tty 設(shè)備),返回
True,否則返回False。
-
os.lockf(fd, cmd, len)? 在打開的文件描述符上,使用、測試或刪除 POSIX 鎖。fd 是一個打開的文件描述符。cmd 指定要進行的操作,它們是
F_LOCK、F_TLOCK、F_ULOCK或F_TEST中的一個。len 指定哪部分文件需要鎖定。可用性: Unix。
3.3 新版功能.
-
os.lseek(fd, pos, how)? 將文件描述符 fd 的當前位置設(shè)置為 pos,位置的計算方式 how 如下:設(shè)置為
SEEK_SET或0表示從文件開頭計算,設(shè)置為SEEK_CUR或1表示從文件當前位置計算,設(shè)置為SEEK_END或2表示文件末尾計算。返回新指針位置,這個位置是從文件開頭計算的,單位是字節(jié)。
-
os.SEEK_SET? -
os.SEEK_CUR? -
os.SEEK_END? lseek()函數(shù)的參數(shù),它們的值分別為 0、1 和 2。3.3 新版功能: 某些操作系統(tǒng)可能支持其他值,例如
os.SEEK_HOLE或os.SEEK_DATA。
-
os.open(path, flags, mode=0o777, *, dir_fd=None)? 打開文件 path,根據(jù) flags 設(shè)置各種標志位,并根據(jù) mode 設(shè)置其權(quán)限模式。當計算 mode 時,會首先根據(jù)當前 umask 值將部分權(quán)限去除。本方法返回新文件的描述符。新的文件描述符是 不可繼承 的。
有關(guān) flag 和 mode 取值的說明,請參見 C 運行時文檔。標志位常量(如
O_RDONLY和O_WRONLY)在os模塊中定義。特別地,在 Windows 上需要添加O_BINARY才能以二進制模式打開文件。本函數(shù)帶有 dir_fd 參數(shù),支持 基于目錄描述符的相對路徑。
在 3.4 版更改: 新的文件描述符現(xiàn)在是不可繼承的。
注解
本函數(shù)適用于底層的 I/O。常規(guī)用途請使用內(nèi)置函數(shù)
open(),該函數(shù)的read()和write()方法(及其他方法)會返回 文件對象。要將文件描述符包裝在文件對象中,請使用fdopen()。3.3 新版功能: dir_fd 參數(shù)。
在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號處理程序沒有觸發(fā)異常,此函數(shù)現(xiàn)在會重試系統(tǒng)調(diào)用,而不是觸發(fā)
InterruptedError異常 (原因詳見 PEP 475)。在 3.6 版更改: 接受一個 path-like object。
以下常量是 open() 函數(shù) flags 參數(shù)的選項??梢杂冒次换蜻\算符 | 將它們組合使用。部分常量并非在所有平臺上都可用。有關(guān)其可用性和用法的說明,請參閱 open(2) 手冊(Unix 上)或 MSDN (Windows 上)。
-
os.O_RDONLY? -
os.O_WRONLY? -
os.O_RDWR? -
os.O_APPEND? -
os.O_CREAT? -
os.O_EXCL? -
os.O_TRUNC? 上述常量在 Unix 和 Windows 上均可用。
-
os.O_DSYNC? -
os.O_RSYNC? -
os.O_SYNC? -
os.O_NDELAY? -
os.O_NONBLOCK? -
os.O_NOCTTY? -
os.O_CLOEXEC? 這個常數(shù)僅在 Unix 系統(tǒng)中可用。
在 3.3 版更改: 增加
O_CLOEXEC常量。
-
os.O_BINARY? -
os.O_NOINHERIT? -
os.O_SHORT_LIVED? -
os.O_TEMPORARY? -
os.O_RANDOM? -
os.O_SEQUENTIAL? -
os.O_TEXT? 這個常數(shù)僅在 Windows 系統(tǒng)中可用。
-
os.O_ASYNC? -
os.O_DIRECT? -
os.O_DIRECTORY? -
os.O_NOFOLLOW? -
os.O_NOATIME? -
os.O_PATH? -
os.O_TMPFILE? -
os.O_SHLOCK? -
os.O_EXLOCK? 上述常量是擴展常量,如果 C 庫未定義它們,則不存在。
-
os.openpty()? 打開一對新的偽終端,返回一對文件描述符``(主,從)``,分別為 pty 和 tty。新的文件描述符是 不可繼承 的。對于(稍微)輕量一些的方法,請使用
pty模塊。可用性: 某些 Unix。
在 3.4 版更改: 新的文件描述符不再可繼承。
-
os.pipe()? 創(chuàng)建一個管道,返回一對分別用于讀取和寫入的文件描述符
(r, w)。新的文件描述符是 不可繼承 的。可用性: Unix, Windows。
在 3.4 版更改: 新的文件描述符不再可繼承。
-
os.pipe2(flags)? 創(chuàng)建帶有 flags 標志位的管道??赏ㄟ^對以下一個或多個值進行“或”運算來構(gòu)造這些 flags:
O_NONBLOCK、O_CLOEXEC。返回一對分別用于讀取和寫入的文件描述符(r, w)。可用性: 某些 Unix。
3.3 新版功能.
-
os.posix_fallocate(fd, offset, len)? 確保為 fd 指向的文件分配了足夠的磁盤空間,該空間從偏移量 offset 開始,到 len 字節(jié)為止。
可用性: Unix。
3.3 新版功能.
-
os.posix_fadvise(fd, offset, len, advice)? 聲明即將以特定模式訪問數(shù)據(jù),使內(nèi)核可以提前進行優(yōu)化。數(shù)據(jù)范圍是從 fd 所指向文件的 offset 開始,持續(xù) len 個字節(jié)。advice 的取值是如下之一:
POSIX_FADV_NORMAL,POSIX_FADV_SEQUENTIAL,POSIX_FADV_RANDOM,POSIX_FADV_NOREUSE,POSIX_FADV_WILLNEED或POSIX_FADV_DONTNEED。可用性: Unix。
3.3 新版功能.
-
os.POSIX_FADV_NORMAL? -
os.POSIX_FADV_SEQUENTIAL? -
os.POSIX_FADV_RANDOM? -
os.POSIX_FADV_NOREUSE? -
os.POSIX_FADV_WILLNEED? -
os.POSIX_FADV_DONTNEED? 用于
posix_fadvise()的 advice 參數(shù)的標志位,指定可能使用的訪問模式。可用性: Unix。
3.3 新版功能.
-
os.pread(fd, n, offset)? 從文件描述符 fd 所指向文件的偏移位置 offset 開始,讀取至多 n 個字節(jié),而保持文件偏移量不變。
返回所讀取字節(jié)的字節(jié)串 (bytestring)。如果到達了 fd 指向的文件末尾,則返回空字節(jié)對象。
可用性: Unix。
3.3 新版功能.
-
os.preadv(fd, buffers, offset, flags=0)? 從文件描述符 fd 所指向文件的偏移位置 offset 開始,將數(shù)據(jù)讀取至可變 字節(jié)類對象 緩沖區(qū) buffers 中,保持文件偏移量不變。將數(shù)據(jù)依次存放到每個緩沖區(qū)中,填滿一個后繼續(xù)存放到序列中的下一個緩沖區(qū),來保存其余數(shù)據(jù)。
flags 參數(shù)可以由零個或多個標志位進行按位或運算來得到:
返回實際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對象的總?cè)萘俊?/p>
操作系統(tǒng)可能對允許使用的緩沖區(qū)數(shù)量有限制(使用
sysconf()獲取'SC_IOV_MAX'值)。本方法結(jié)合了
os.readv()和os.pread()的功能。可用性:Linux 2.6.30 或更高版本,F(xiàn)reeBSD 6.0 或更高版本,OpenBSD 2.7 或更高版本。使用標志位需要 Linux 4.6 或更高版本。
3.7 新版功能.
-
os.RWF_NOWAIT? 不要等待無法立即獲得的數(shù)據(jù)。如果指定了此標志,那么當需要從后備存儲器中讀取數(shù)據(jù),或等待文件鎖時,系統(tǒng)調(diào)用將立即返回。
如果成功讀取數(shù)據(jù),則返回讀取的字節(jié)數(shù)。如果未讀取到數(shù)據(jù),則返回
-1,并將錯誤碼 errno 置為errno.EAGAIN。可用性:Linux 4.14 或更高版本。
3.7 新版功能.
-
os.RWF_HIPRI? 高優(yōu)先級讀/寫。允許基于塊的文件系統(tǒng)對設(shè)備進行輪詢,這樣可以降低延遲,但可能會占用更多資源。
目前在 Linux 上,此功能僅在使用
O_DIRECTflag 標志打開的文件描述符上可用。可用性:Linux 4.6 或更高版本。
3.7 新版功能.
-
os.pwrite(fd, str, offset)? 將 str 中的字節(jié)串 (bytestring) 寫入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。
返回實際寫入的字節(jié)數(shù)。
可用性: Unix。
3.3 新版功能.
-
os.pwritev(fd, buffers, offset, flags=0)? 將緩沖區(qū) buffers 的內(nèi)容寫入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。緩沖區(qū) buffers 必須是由 字節(jié)類對象 組成的序列。緩沖區(qū)以數(shù)組順序處理。先寫入第一個緩沖區(qū)的全部內(nèi)容,再寫入第二個緩沖區(qū),照此繼續(xù)。
flags 參數(shù)可以由零個或多個標志位進行按位或運算來得到:
返回實際寫入的字節(jié)總數(shù)。
操作系統(tǒng)可能對允許使用的緩沖區(qū)數(shù)量有限制(使用
sysconf()獲取'SC_IOV_MAX'值)。本方法結(jié)合了
os.writev()和os.pwrite()的功能。可用性:Linux 2.6.30 或更高版本,F(xiàn)reeBSD 6.0 或更高版本,OpenBSD 2.7 或更高版本。使用標志位需要 Linux 4.7 或更高版本。
3.7 新版功能.
-
os.RWF_DSYNC? 提供立即寫入功能,等效于
O_DSYNCopen(2)標志。該標志僅作用于系統(tǒng)調(diào)用寫入的數(shù)據(jù)。可用性:Linux 4.7 或更高版本。
3.7 新版功能.
-
os.RWF_SYNC? 提供立即寫入功能,等效于
O_SYNCopen(2)標志。該標志僅作用于系統(tǒng)調(diào)用寫入的數(shù)據(jù)。可用性:Linux 4.7 或更高版本。
3.7 新版功能.
-
os.read(fd, n)? 從文件描述符 fd 中讀取至多 n 個字節(jié)。
返回所讀取字節(jié)的字節(jié)串 (bytestring)。如果到達了 fd 指向的文件末尾,則返回空字節(jié)對象。
注解
該功能適用于低級 I/O 操作,必須用于
os.open()或pipe()返回的文件描述符。讀取由內(nèi)建函數(shù)open()、popen()、fdopen()或sys.stdin返回的 "文件對象",則使用其相應(yīng)的read()或readline()方法。在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號處理程序沒有觸發(fā)異常,此函數(shù)現(xiàn)在會重試系統(tǒng)調(diào)用,而不是觸發(fā)
InterruptedError異常 (原因詳見 PEP 475)。
-
os.sendfile(out, in, offset, count)? -
os.sendfile(out, in, offset, count, [headers, ][trailers, ]flags=0) 將文件描述符 in 中的 count 字節(jié)復(fù)制到文件描述符 out 的偏移位置 offset 處。返回復(fù)制的字節(jié)數(shù),如果到達 EOF,返回0。
定義了
sendfile()的所有平臺均支持第一種函數(shù)用法。在 Linux 上,將 offset 設(shè)置為
None,則從 in 的當前位置開始讀取,并更新 in 的位置。第二種函數(shù)用法可以在 Mac OS X 和 FreeBSD 上使用,其中,headers 和 trailers 是任意的緩沖區(qū)序列,它們分別在寫入 in 的數(shù)據(jù)前、后被寫入。返回值與第一種用法相同。
在 Mac OS X 和 FreeBSD 上,將 count 設(shè)為 0 表示持續(xù)復(fù)制直到 in 的結(jié)尾。
所有平臺都支持將套接字作為 out 文件描述符,有些平臺也支持其他類型(如常規(guī)文件或管道)。
跨平臺應(yīng)用程序不應(yīng)使用 headers、trailers 和 flags 參數(shù)。
可用性: Unix。
注解
有關(guān)
sendfile()的高級封裝,參見socket.socket.sendfile()。3.3 新版功能.
-
os.set_blocking(fd, blocking)? 設(shè)置指定文件描述符的阻塞模式:如果 blocking 為
False,則為該描述符設(shè)置O_NONBLOCK標志位,反之則清除該標志位。參見
get_blocking()和socket.socket.setblocking()。可用性: Unix。
3.5 新版功能.
-
os.SF_NODISKIO? -
os.SF_MNOWAIT? -
os.SF_SYNC? sendfile()函數(shù)的參數(shù)(假設(shè)當前實現(xiàn)支持這些參數(shù))。可用性: Unix。
3.3 新版功能.
-
os.readv(fd, buffers)? 從文件描述符 fd 將數(shù)據(jù)讀取至多個可變的 字節(jié)類對象 緩沖區(qū) buffers 中。將數(shù)據(jù)依次存放到每個緩沖區(qū)中,填滿一個后繼續(xù)存放到序列中的下一個緩沖區(qū),來保存其余數(shù)據(jù)。
返回實際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對象的總?cè)萘俊?/p>
操作系統(tǒng)可能對允許使用的緩沖區(qū)數(shù)量有限制(使用
sysconf()獲取'SC_IOV_MAX'值)。可用性: Unix。
3.3 新版功能.
-
os.tcsetpgrp(fd, pg)? 設(shè)置與 fd 指定的終端相關(guān)聯(lián)的進程組為 pg*(*fd 是由
os.open()返回的已打開的文件描述符)。可用性: Unix。
-
os.ttyname(fd)? 返回一個字符串,該字符串表示與文件描述符 fd 關(guān)聯(lián)的終端。如果 fd 沒有與終端關(guān)聯(lián),則拋出異常。
可用性: Unix。
-
os.write(fd, str)? 將 str 中的字節(jié)串 (bytestring) 寫入文件描述符 fd。
返回實際寫入的字節(jié)數(shù)。
注解
該功能適用于低級 I/O 操作,必須用于
os.open()或pipe()返回的文件描述符。若要寫入由內(nèi)建函數(shù)open()、popen()、fdopen()、sys.stdout或sys.stderr返回的 "文件對象",則應(yīng)使用其相應(yīng)的write()方法。在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號處理程序沒有觸發(fā)異常,此函數(shù)現(xiàn)在會重試系統(tǒng)調(diào)用,而不是觸發(fā)
InterruptedError異常 (原因詳見 PEP 475)。
-
os.writev(fd, buffers)? 將緩沖區(qū) buffers 的內(nèi)容寫入文件描述符 fd。緩沖區(qū) buffers 必須是由 字節(jié)類對象 組成的序列。緩沖區(qū)以數(shù)組順序處理。先寫入第一個緩沖區(qū)的全部內(nèi)容,再寫入第二個緩沖區(qū),照此繼續(xù)。
返回實際寫入的字節(jié)總數(shù)。
操作系統(tǒng)可能對允許使用的緩沖區(qū)數(shù)量有限制(使用
sysconf()獲取'SC_IOV_MAX'值)。可用性: Unix。
3.3 新版功能.
查詢終端的尺寸?
3.3 新版功能.
-
os.get_terminal_size(fd=STDOUT_FILENO)? 返回終端窗口的尺寸,格式為``(列,行)``,它是類型為
terminal_size的元組。可選參數(shù)
fd``(默認為 ``STDOUT_FILENO或標準輸出)指定應(yīng)查詢的文件描述符。如果文件描述符未連接到終端,則拋出
OSError異常。shutil.get_terminal_size()是供常規(guī)使用的高階函數(shù),os.get_terminal_size是其底層的實現(xiàn)。可用性: Unix, Windows。
文件描述符的繼承?
3.4 新版功能.
每個文件描述符都有一個 "inheritable"(可繼承)標志位,該標志位控制了文件描述符是否可以由子進程繼承。從 Python 3.4 開始,由 Python 創(chuàng)建的文件描述符默認是不可繼承的。
在 UNIX 上,執(zhí)行新程序時,子進程中不可繼承的文件描述符會被關(guān)閉,其他文件描述符將被繼承。
在 Windows 上,不可繼承的句柄和文件描述符在子進程中是關(guān)閉的,但標準流(文件描述符 0、1 和 2 即標準輸入、標準輸出和標準錯誤)是始終繼承的。如果使用 spawn* 函數(shù),所有可繼承的句柄和文件描述符都將被繼承。如果使用 subprocess 模塊,將關(guān)閉除標準流以外的所有文件描述符,并且僅當 close_fds 參數(shù)為 False 時才繼承可繼承的句柄。
-
os.get_inheritable(fd)? 獲取指定文件描述符的“可繼承”標志位(為布爾值)。
-
os.set_inheritable(fd, inheritable)? 設(shè)置指定文件描述符的“可繼承”標志位。
文件和目錄?
在某些 Unix 平臺上,許多函數(shù)支持以下一項或多項功能:
specifying a file descriptor: For some functions, the path argument can be not only a string giving a path name, but also a file descriptor. The function will then operate on the file referred to by the descriptor. (For POSIX systems, Python will call the
f...version of the function.)You can check whether or not path can be specified as a file descriptor on your platform using
os.supports_fd. If it is unavailable, using it will raise aNotImplementedError.If the function also supports dir_fd or follow_symlinks arguments, it is an error to specify one of those when supplying path as a file descriptor.
paths relative to directory descriptors: If dir_fd is not
None, it should be a file descriptor referring to a directory, and the path to operate on should be relative; path will then be relative to that directory. If the path is absolute, dir_fd is ignored. (For POSIX systems, Python will call the...atorf...atversion of the function.)You can check whether or not dir_fd is supported on your platform using
os.supports_dir_fd. If it is unavailable, using it will raise aNotImplementedError.
not following symlinks: If follow_symlinks is
False, and the last element of the path to operate on is a symbolic link, the function will operate on the symbolic link itself instead of the file the link points to. (For POSIX systems, Python will call thel...version of the function.)You can check whether or not follow_symlinks is supported on your platform using
os.supports_follow_symlinks. If it is unavailable, using it will raise aNotImplementedError.
-
os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)? 使用真實的 uid/gid 測試對 path 的訪問。請注意,大多數(shù)測試操作將使用有效的 uid/gid,因此可以在 suid/sgid 環(huán)境中運用此例程,來測試調(diào)用用戶是否具有對 path 的指定訪問權(quán)限。mode 為
F_OK時用于測試 path 是否存在,也可以對R_OK、W_OK和X_OK中的一個或多個進行“或”運算來測試指定權(quán)限。允許訪問則返回True,否則返回False。更多信息請參見 Unix 手冊頁 access(2)。本函數(shù)支持指定 基于目錄描述符的相對路徑 和 不跟蹤符號鏈接。
如果 effective_ids 為
True,access()將使用 有效用戶ID/用戶組ID 而非 實際用戶ID/用戶組ID 進行訪問檢查。您的平臺可能不支持 effective_ids,您可以使用os.supports_effective_ids檢查它是否可用。如果不可用,使用它時會拋出NotImplementedError異常。注解
使用
access()來檢查用戶是否具有某項權(quán)限(如打開文件的權(quán)限),然后再使用open()打開文件,這樣做存在一個安全漏洞,因為用戶可能會在檢查和打開文件之間的時間里做其他操作。推薦使用 EAFP 技術(shù)。如:if os.access("myfile", os.R_OK): with open("myfile") as fp: return fp.read() return "some default data"
最好寫成:
try: fp = open("myfile") except PermissionError: return "some default data" else: with fp: return fp.read()
注解
即使
access()指示 I/O 操作會成功,但實際操作仍可能失敗,尤其是對網(wǎng)絡(luò)文件系統(tǒng)的操作,其權(quán)限語義可能超出常規(guī)的 POSIX 權(quán)限位模型。在 3.3 版更改: 添加 dir_fd、effective_ids 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.F_OK? -
os.R_OK? -
os.W_OK? -
os.X_OK? 作為
access()的 mode 參數(shù)的可選值,分別測試 path 的存在性、可讀性、可寫性和可執(zhí)行性。
-
os.chdir(path)? 將當前工作目錄更改為 path。
本函數(shù)支持 指定文件描述符為參數(shù)。其中,描述符必須指向打開的目錄,不能是打開的文件。
本函數(shù)可以拋出
OSError及其子類的異常,如FileNotFoundError、PermissionError和NotADirectoryError異常。3.3 新版功能: 在某些平臺上新增支持將 path 參數(shù)指定為文件描述符。
在 3.6 版更改: 接受一個 path-like object。
-
os.chflags(path, flags, *, follow_symlinks=True)? 將 path 標志設(shè)置為數(shù)字 標志。標志 可以用以下值按位或組合起來(以下值在
stat模塊中定義):本函數(shù)支持 不跟蹤符號鏈接。
可用性: Unix。
3.3 新版功能: follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)? 將 path 的 mode 更改為其他由數(shù)字表示的 mode。mode 可以用以下值之一,也可以將它們按位或組合起來(以下值在
stat模塊中定義):本函數(shù)支持指定 指定文件描述符為參數(shù)、基于目錄描述符的相對路徑 和 不跟蹤符號鏈接。
注解
盡管 Windows 支持
chmod(),但只能用它設(shè)置文件的只讀標志(stat.S_IWRITE和stat.S_IREAD常量或?qū)?yīng)的整數(shù)值)。所有其他標志位都會被忽略。3.3 新版功能: 添加了指定 path 為文件描述符的支持,以及 dir_fd 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)? 將 path 的用戶和組 ID 分別修改為數(shù)字形式的 uid 和 gid。若要使其中某個 ID 保持不變,請將其置為 -1。
本函數(shù)支持指定 指定文件描述符為參數(shù)、基于目錄描述符的相對路徑 和 不跟蹤符號鏈接。
參見更高階的函數(shù)
shutil.chown(),除了數(shù)字 ID 之外,它也接受名稱。可用性: Unix。
3.3 新版功能: Added support for specifying an open file descriptor for path, and the dir_fd and follow_symlinks arguments.
在 3.6 版更改: 支持 類路徑對象。
-
os.chroot(path)? 將當前進程的根目錄更改為 path。
可用性: Unix。
在 3.6 版更改: 接受一個 path-like object。
-
os.fchdir(fd)? 將當前工作目錄更改為文件描述符 fd 指向的目錄。fd 必須指向打開的目錄而非文件。從 Python 3.3 開始,它等效于
os.chdir(fd)。可用性: Unix。
-
os.getcwd()? 返回表示當前工作目錄的字符串。
-
os.getcwdb()? 返回表示當前工作目錄的字節(jié)串 (bytestring)。
-
os.lchflags(path, flags)? 將 path 的 flags 設(shè)置為其他由數(shù)字表示的 flags,與
chflags()類似,但不跟蹤符號鏈接。從 Python 3.3 開始,它等效于os.chflags(path, flags, follow_symlinks=False)。可用性: Unix。
在 3.6 版更改: 接受一個 path-like object。
-
os.lchmod(path, mode)? 將 path 的權(quán)限狀態(tài)修改為 mode。如果 path 是符號鏈接,則影響符號鏈接本身而非鏈接目標??梢詤⒖?
chmod()中列出 mode 的可用值。從 Python 3.3 開始,這相當于os.chmod(path, mode, follow_symlinks=False)。可用性: Unix。
在 3.6 版更改: 接受一個 path-like object。
-
os.lchown(path, uid, gid)? 將 path 的用戶和組 ID 分別修改為數(shù)字形式的 uid 和 gid,本函數(shù)不跟蹤符號鏈接。從 Python 3.3 開始,它等效于
os.chown(path, uid, gid, follow_symlinks=False)。可用性: Unix。
在 3.6 版更改: 接受一個 path-like object。
-
os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)? 創(chuàng)建一個指向 src?的硬鏈接,名為 dst。
本函數(shù)支持將 src_dir_fd 和 dst_dir_fd 中的一個或兩個指定為 基于目錄描述符的相對路徑,支持 不跟蹤符號鏈接。
可用性: Unix, Windows。
在 3.2 版更改: 添加了Windows?支持
3.3 新版功能: 添加 src_dir_fd、dst_dir_fd 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個 類路徑對象 作為 src 和 dst。
-
os.listdir(path='.')? 返回一個列表,該列表包含了 path 中所有文件與目錄的名稱。該列表按任意順序排列,并且不包含特殊條目
'.'和'..',即使它們確實在目錄中存在。path 可以是 路徑類對象。如果 path 是(直接/間接由
PathLike接口返回的)bytes類型,則返回的文件名也將是bytes類型,其他情況下文件名類型是str。本函數(shù)也支持 指定文件描述符為參數(shù),其中描述符必須指向目錄。
注解
要將
str類型的文件名編碼為bytes,請使用fsencode()。參見
scandir()函數(shù)返回目錄內(nèi)文件名的同時,也返回文件屬性信息,它在某些具體情況下能提供更好的性能。在 3.2 版更改: path 變?yōu)榭蛇x參數(shù)。
3.3 新版功能: Added support for specifying an open file descriptor for path.
在 3.6 版更改: 接受一個 path-like object。
-
os.lstat(path, *, dir_fd=None)? 在給定路徑上執(zhí)行本函數(shù),其操作相當于
lstat()系統(tǒng)調(diào)用,類似于stat()但不跟蹤符號鏈接。返回值是stat_result對象。在不支持符號鏈接的平臺上,本函數(shù)是
stat()的別名。從 Python 3.3 起,此功能等價于
os.stat(path, dir_fd=dir_fd, follow_symlinks=False)。本函數(shù)支持 基于目錄描述符的相對路徑。
參見
stat()函數(shù)。在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。
在 3.3 版更改: 添加了 dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 類路徑對象 作為 src 和 dst。
-
os.mkdir(path, mode=0o777, *, dir_fd=None)? 創(chuàng)建一個名為 path 的目錄,應(yīng)用以數(shù)字表示的權(quán)限模式 mode。
如果目錄已存在,則拋出
FileExistsError異常。某些系統(tǒng)會忽略 mode。如果沒有忽略它,那么將首先從它中減去當前的 umask 值。如果除最后 9 位(即 mode 八進制的最后 3 位)之外,還設(shè)置了其他位,則其他位的含義取決于各個平臺。在某些平臺上,它們會被忽略,應(yīng)顯式調(diào)用
chmod()進行設(shè)置。本函數(shù)支持 基于目錄描述符的相對路徑。
如果需要創(chuàng)建臨時目錄,請參閱
tempfile模塊中的tempfile.mkdtemp()函數(shù)。3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.makedirs(name, mode=0o777, exist_ok=False)? 遞歸目錄創(chuàng)建函數(shù)。與
mkdir()類似,但會自動創(chuàng)建到達最后一級目錄所需要的中間目錄。mode 參數(shù)會傳遞給
mkdir(),用來創(chuàng)建最后一級目錄,對于該參數(shù)的解釋,請參閱 mkdir() 中的描述。要設(shè)置某些新建的父目錄的權(quán)限,可以在調(diào)用makedirs()之前設(shè)置 umask?,F(xiàn)有父目錄的權(quán)限不會更改。如果 exist_ok 為
False(默認值),則如果目標目錄已存在將引發(fā)FileExistsError。注解
如果要創(chuàng)建的路徑元素包含
pardir(如 UNIX 系統(tǒng)中的 "..")makedirs()將無法明確目標。本函數(shù)能正確處理 UNC 路徑。
3.2 新版功能: exist_ok 參數(shù)。
在 3.4.1 版更改: 在 Python 3.4.1 以前,如果 exist_ok 為
True,且目錄已存在,且 mode 與現(xiàn)有目錄的權(quán)限不匹配,makedirs()仍會拋出錯誤。由于無法安全地實現(xiàn)此行為,因此在 Python 3.4.1 中將該行為刪除。請參閱 bpo-21082。在 3.6 版更改: 接受一個 path-like object。
在 3.7 版更改: mode 參數(shù)不再影響新創(chuàng)建的中間目錄的權(quán)限。
-
os.mkfifo(path, mode=0o666, *, dir_fd=None)? 創(chuàng)建一個名為 path 的 FIFO(命名管道,一種先進先出隊列),具有以數(shù)字表示的權(quán)限狀態(tài) mode。將從 mode 中首先減去當前的 umask 值。
本函數(shù)支持 基于目錄描述符的相對路徑。
FIFO 是可以像常規(guī)文件一樣訪問的管道。FIFO 如果沒有被刪除(如使用
os.unlink()),會一直存在。通常,F(xiàn)IFO 用作“客戶端”和“服務(wù)器”進程之間的匯合點:服務(wù)器打開 FIFO 進行讀取,而客戶端打開 FIFO 進行寫入。請注意,mkfifo()不會打開 FIFO --- 它只是創(chuàng)建匯合點。可用性: Unix。
3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.mknod(path, mode=0o600, device=0, *, dir_fd=None)? 創(chuàng)建一個名為 path 的文件系統(tǒng)節(jié)點(文件,設(shè)備專用文件或命名管道)。mode 指定權(quán)限和節(jié)點類型,方法是將權(quán)限與下列節(jié)點類型
stat.S_IFREG、stat.S_IFCHR、stat.S_IFBLK和stat.S_IFIFO之一(按位或)組合(這些常量可以在stat模塊中找到)。對于stat.S_IFCHR和stat.S_IFBLK,device 參數(shù)指定了新創(chuàng)建的設(shè)備專用文件(可能會用到os.makedev()),否則該參數(shù)將被忽略。本函數(shù)支持 基于目錄描述符的相對路徑。
可用性: Unix。
3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.major(device)? 提取主設(shè)備號,提取自原始設(shè)備號(通常是
stat中的st_dev或st_rdev字段)。
-
os.minor(device)? 提取次設(shè)備號,提取自原始設(shè)備號(通常是
stat中的st_dev或st_rdev字段)。
-
os.makedev(major, minor)? 將主設(shè)備號和次設(shè)備號組合成原始設(shè)備號。
-
os.pathconf(path, name)? 返回所給名稱的文件有關(guān)的系統(tǒng)配置信息。name 指定要查找的配置名稱,它可以是字符串,是一個系統(tǒng)已定義的名稱,這些名稱定義在不同標準(POSIX.1,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱。當前操作系統(tǒng)已定義的名稱在
pathconf_names字典中給出。對于未包含在該映射中的配置名稱,也可以傳遞一個整數(shù)作為 name。如果 name 是一個字符串且不是已定義的名稱,將拋出
ValueError異常。如果當前系統(tǒng)不支持 name 指定的配置名稱,即使該名稱存在于pathconf_names,也會拋出OSError異常,錯誤碼為errno.EINVAL。本函數(shù)支持 指定文件描述符為參數(shù)。
可用性: Unix。
在 3.6 版更改: 接受一個 path-like object。
-
os.pathconf_names? 字典,表示映射關(guān)系,為
pathconf()和fpathconf()可接受名稱與操作系統(tǒng)為這些名稱定義的整數(shù)值之間的映射。這可用于判斷系統(tǒng)已定義了哪些名稱。可用性: Unix。
-
os.readlink(path, *, dir_fd=None)? 返回一個字符串,為符號鏈接指向的實際路徑。其結(jié)果可以是絕對或相對路徑。如果是相對路徑,則可用
os.path.join(os.path.dirname(path), result)轉(zhuǎn)換為絕對路徑。如果 path 是字符串對象(直接傳入或通過
PathLike接口間接傳入),則結(jié)果也將是字符串對象,且此類調(diào)用可能會引發(fā) UnicodeDecodeError。如果 path 是字節(jié)對象(直接傳入或間接傳入),則結(jié)果將會是字節(jié)對象。本函數(shù)支持 基于目錄描述符的相對路徑。
可用性: Unix, Windows。
在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。
3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.remove(path, *, dir_fd=None)? 移除(刪除)文件 path。如果 path 是目錄,則拋出
IsADirectoryError異常。請使用rmdir()刪除目錄。本函數(shù)支持 基于目錄描述符的相對路徑。
在 Windows 上,嘗試刪除正在使用的文件會拋出異常。而在 Unix 上,雖然該文件的條目會被刪除,但分配給文件的存儲空間仍然不可用,直到原始文件不再使用為止。
本函數(shù)在語義上與
unlink()相同。3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.removedirs(name)? 遞歸刪除目錄。工作方式類似于
rmdir(),不同之處在于,如果成功刪除了末尾一級目錄,removedirs()會嘗試依次刪除 path 中提到的每個父目錄,直到拋出錯誤為止(但該錯誤會被忽略,因為這通常表示父目錄不是空目錄)。例如,os.removedirs('foo/bar/baz')將首先刪除目錄'foo/bar/baz',然后如果'foo/bar'和'foo'為空,則繼續(xù)刪除它們。如果無法成功刪除末尾一級目錄,則拋出OSError異常。在 3.6 版更改: 接受一個 path-like object。
-
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)? 將文件或目錄 src 重命名為 dst。如果 dst 已存在,則下列情況下將會操作失敗,并拋出
OSError的子類:在 Windows 上,如果 dst 已存在,則拋出
FileExistsError異常。在 Unix 上,如果 src 是文件而 dst 是目錄,將拋出
IsADirectoryError異常,反之則拋出NotADirectoryError異常。如果兩者都是目錄且 dst 為空,則 dst 將被靜默替換。如果 dst 是非空目錄,則拋出OSError異常。如果兩者都是文件,則在用戶具有權(quán)限的情況下,將對 dst 進行靜默替換。如果 src 和 dst 在不同的文件系統(tǒng)上,則本操作在某些 Unix 分支上可能會失敗。如果成功,重命名操作將是一個原子操作(這是 POSIX 的要求)。本函數(shù)支持將 src_dir_fd 和 dst_dir_fd 中的一個或兩個指定為 基于目錄描述符的相對路徑。
如果需要在不同平臺上都能替換目標,請使用
replace()。3.3 新版功能: src_dir_fd 和 dst_dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 類路徑對象 作為 src 和 dst。
-
os.renames(old, new)? 遞歸重命名目錄或文件。工作方式類似
rename(),除了會首先創(chuàng)建新路徑所需的中間目錄。重命名后,將調(diào)用removedirs()刪除舊路徑中不需要的目錄。注解
如果用戶沒有權(quán)限刪除末級的目錄或文件,則本函數(shù)可能會無法建立新的目錄結(jié)構(gòu)。
在 3.6 版更改: 接受一個 類路徑對象 作為 old 和 new。
-
os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)? 將文件或目錄 src 重命名為 dst。如果 dst 是目錄,將拋出
OSError異常。如果 dst 已存在且為文件,則在用戶具有權(quán)限的情況下,將對其進行靜默替換。如果 src 和 dst 在不同的文件系統(tǒng)上,本操作可能會失敗。如果成功,重命名操作將是一個原子操作(這是 POSIX 的要求)。本函數(shù)支持將 src_dir_fd 和 dst_dir_fd 中的一個或兩個指定為 基于目錄描述符的相對路徑。
3.3 新版功能.
在 3.6 版更改: 接受一個 類路徑對象 作為 src 和 dst。
-
os.rmdir(path, *, dir_fd=None)? 移除(刪除)目錄 path。如果目錄不存在或不為空,則會分別拋出
FileNotFoundError或OSError異常。要刪除整個目錄樹,可以使用shutil.rmtree()。本函數(shù)支持 基于目錄描述符的相對路徑。
3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.scandir(path='.')? 返回一個迭代出
os.DirEntry對象的迭代器,這些對象對應(yīng)于 path 目錄中的條目。條目的生成順序是任意的,特殊條目'.'和'..'不包括在內(nèi)。如果需要文件類型或文件屬性信息,使用
scandir()代替listdir()可以大大提高這部分代碼的性能,因為如果操作系統(tǒng)在掃描目錄時返回的是os.DirEntry對象,則該對象包含了這些信息。所有os.DirEntry的方法都可能執(zhí)行一次系統(tǒng)調(diào)用,但是is_dir()和is_file()通常只在有符號鏈接時才執(zhí)行一次系統(tǒng)調(diào)用。os.DirEntry.stat()在 Unix 上始終需要一次系統(tǒng)調(diào)用,而在 Windows 上只在有符號鏈接時才需要。path 可以是 類路徑對象。如果 path 是(直接/間接由
PathLike接口返回的)``bytes`` 類型,那么每個os.DirEntry的name和path屬性將是bytes類型,其他情況下是str類型。本函數(shù)也支持 指定文件描述符為參數(shù),其中描述符必須指向目錄。
scandir()迭代器支持 上下文管理 協(xié)議,并具有以下方法:-
scandir.close()? 關(guān)閉迭代器并釋放占用的資源。
當?shù)鞯戤?,或垃圾回收,或迭代過程出錯時,將自動調(diào)用本方法。但仍建議顯式調(diào)用它或使用
with語句。3.6 新版功能.
下面的例子演示了
scandir()的簡單用法,用來顯示給定 path 中所有不以'.'開頭的文件(不包括目錄)。entry.is_file()通常不會增加一次額外的系統(tǒng)調(diào)用:with os.scandir(path) as it: for entry in it: if not entry.name.startswith('.') and entry.is_file(): print(entry.name)
注解
在基于 Unix 的系統(tǒng)上,
scandir()使用系統(tǒng)的 opendir() 和 readdir() 函數(shù)。在 Windows 上,它使用 Win32 FindFirstFileW 和 FindNextFileW 函數(shù)。3.5 新版功能.
3.6 新版功能: 添加了對 上下文管理 協(xié)議和
close()方法的支持。如果scandir()迭代器沒有迭代完畢且沒有顯式關(guān)閉,其析構(gòu)函數(shù)將發(fā)出ResourceWarning警告。本函數(shù)接受一個 類路徑對象。
在 3.7 版更改: 在 Unix 上新增支持 指定文件描述符為參數(shù)。
-
-
class
os.DirEntry? 由
scandir()產(chǎn)生的對象,用于顯示目錄內(nèi)某個條目的文件路徑和其他文件屬性。scandir()將在不進行額外系統(tǒng)調(diào)用的情況下,提供盡可能多的此類信息。每次進行stat()或lstat()系統(tǒng)調(diào)用時,os.DirEntry對象會將結(jié)果緩存下來。os.DirEntry實例不適合存儲在長期存在的數(shù)據(jù)結(jié)構(gòu)中,如果你知道文件元數(shù)據(jù)已更改,或者自調(diào)用scandir()以來已經(jīng)經(jīng)過了很長時間,請調(diào)用os.stat(entry.path)來獲取最新信息。因為
os.DirEntry方法可以進行系統(tǒng)調(diào)用,所以它也可能拋出OSError異常。如需精確定位錯誤,可以逐個調(diào)用os.DirEntry中的方法來捕獲OSError,并適當處理。為了能直接用作 類路徑對象,
os.DirEntry實現(xiàn)了PathLike接口。os.DirEntry實例所包含的屬性和方法如下:-
name? 本條目的基本文件名,是根據(jù)
scandir()的 path 參數(shù)得出的相對路徑。如果
scandir()的 path 參數(shù)是bytes類型,則name屬性也是bytes類型,否則為str。使用fsdecode()解碼 byte 類型的文件名。
-
path? 本條目的完整路徑:等效于
os.path.join(scandir_path, entry.name),其中 scandir_path 就是scandir()的 path 參數(shù)。僅當scandir()的 path 參數(shù)為絕對路徑時,本路徑才是絕對路徑。如果scandir()的 path 參數(shù)是 文件描述符,則path屬性與上述name屬性相同。如果
scandir()的 path 參數(shù)是bytes類型,則path屬性也是bytes類型,否則為str。使用fsdecode()解碼 byte 類型的文件名。
-
inode()? 返回本條目的索引節(jié)點號。
這一結(jié)果是緩存在
os.DirEntry對象中的,請調(diào)用os.stat(entry.path, follow_symlinks=False).st_ino來獲取最新信息。一開始沒有緩存時,在 Windows 上需要一次系統(tǒng)調(diào)用,但在 Unix 上不需要。
-
is_dir(*, follow_symlinks=True)? 如果本條目是目錄,或是指向目錄的符號鏈接,則返回
True。如果本條目是文件,或指向任何其他類型的文件,或該文件不再存在,則返回False。如果 follow_symlinks 是
False,那么僅當本條目為目錄時返回True``(不跟蹤符號鏈接),如果本條目是任何類型的文件,或該文件不再存在,則返回 ``False。這一結(jié)果是緩存在
os.DirEntry對象中的,且 follow_symlinks 為True和False時的緩存是分開的。請調(diào)用os.stat()和stat.S_ISDIR()來獲取最新信息。一開始沒有緩存時,大多數(shù)情況下不需要系統(tǒng)調(diào)用。特別是對于非符號鏈接,Windows 和 Unix 都不需要系統(tǒng)調(diào)用,除非某些 Unix 文件系統(tǒng)(如網(wǎng)絡(luò)文件系統(tǒng))返回了
dirent.d_type == DT_UNKNOWN。如果本條目是符號鏈接,則需要一次系統(tǒng)調(diào)用來跟蹤它(除非 follow_symlinks 為False)。本方法可能引發(fā)
OSError異常,如PermissionError異常,但FileNotFoundError異常會被內(nèi)部捕獲且不會引發(fā)。
-
is_file(*, follow_symlinks=True)? 如果本條目是文件,或是指向文件的符號鏈接,則返回
True。如果本條目是目錄,或指向目錄,或指向其他非文件條目,或該文件不再存在,則返回False。如果 follow_symlinks 是
False,那么僅當本條目為文件時返回True``(不跟蹤符號鏈接),如果本條目是目錄或其他非文件條目,或該文件不再存在,則返回 ``False。這一結(jié)果是緩存在
os.DirEntry對象中的。緩存、系統(tǒng)調(diào)用、異常拋出都與is_dir()一致。
-
is_symlink()? 如果本條目是符號鏈接(即使是斷開的鏈接),返回
True。如果是目錄或任何類型的文件,或本條目不再存在,返回False。這一結(jié)果是緩存在
os.DirEntry對象中的,請調(diào)用os.path.islink()來獲取最新信息。一開始沒有緩存時,大多數(shù)情況下不需要系統(tǒng)調(diào)用。其實 Windows 和 Unix 都不需要系統(tǒng)調(diào)用,除非某些 Unix 文件系統(tǒng)(如網(wǎng)絡(luò)文件系統(tǒng))返回了
dirent.d_type == DT_UNKNOWN。本方法可能引發(fā)
OSError異常,如PermissionError異常,但FileNotFoundError異常會被內(nèi)部捕獲且不會引發(fā)。
-
stat(*, follow_symlinks=True)? 返回本條目對應(yīng)的
stat_result對象。本方法默認會跟蹤符號鏈接,要獲取符號鏈接本身的 stat,請?zhí)砑?follow_symlinks=False參數(shù)。On Unix, this method always requires a system call. On Windows, it only requires a system call if follow_symlinks is
Trueand the entry is a symbolic link.在 Windows 上,
stat_result的st_ino、st_dev和st_nlink屬性總是為零。請調(diào)用os.stat()以獲得這些屬性。這一結(jié)果是緩存在
os.DirEntry對象中的,且 follow_symlinks 為True和False時的緩存是分開的。請調(diào)用os.stat()來獲取最新信息。
注意,
os.DirEntry和pathlib.Path的幾個屬性和方法之間存在很好的對應(yīng)關(guān)系。具體來說是name屬性,以及is_dir()、is_file()、is_symlink()和stat()方法,在兩個類中具有相同的含義。3.5 新版功能.
-
-
os.stat(path, *, dir_fd=None, follow_symlinks=True)? 獲取文件或文件描述符的狀態(tài)。在所給路徑上執(zhí)行等效于
stat()系統(tǒng)調(diào)用的操作。path 可以是字符串類型,或(直接/間接由PathLike接口返回的) bytes 類型,或打開的文件描述符。返回一個stat_result對象。本函數(shù)默認會跟蹤符號鏈接,要獲取符號鏈接本身的 stat,請?zhí)砑?
follow_symlinks=False參數(shù),或使用lstat()。本函數(shù)支持 指定文件描述符為參數(shù) 和 不跟蹤符號鏈接。
示例:
>>> import os >>> statinfo = os.stat('somefile.txt') >>> statinfo os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026, st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295, st_mtime=1297230027, st_ctime=1297230027) >>> statinfo.st_size 264
3.3 新版功能: 增加 dir_fd 和 follow_symlinks 參數(shù),可指定文件描述符代替路徑。
在 3.6 版更改: 接受一個 path-like object。
-
class
os.stat_result? 本對象的屬性大致對應(yīng)于
stat結(jié)構(gòu)體成員,主要作為os.stat()、os.fstat()和os.lstat()的返回值。屬性:
-
st_mode? 文件模式:包括文件類型和文件模式位(即權(quán)限位)。
-
st_ino? 與平臺有關(guān),但如果不為零,則根據(jù)
st_dev值唯一地標識文件。通常:在 Unix 上該值表示索引節(jié)點號 (inode number)。
在 Windows 上該值表示 文件索引號 。
-
st_dev? 該文件所在設(shè)備的標識符。
-
st_nlink? 硬鏈接的數(shù)量。
-
st_uid? 文件所有者的用戶 ID。
-
st_gid? 文件所有者的用戶組 ID。
-
st_size? 文件大?。ㄒ宰止?jié)為單位),文件可以是常規(guī)文件或符號鏈接。符號鏈接的大小是它包含的路徑的長度,不包括末尾的空字節(jié)。
時間戳:
-
st_atime? 最近的訪問時間,以秒為單位。
-
st_mtime? 最近的修改時間,以秒為單位。
-
st_ctime? 取決于平臺:
在 Unix 上表示最近的元數(shù)據(jù)更改時間,
在 Windows 上表示創(chuàng)建時間,以秒為單位。
-
st_atime_ns? 最近的訪問時間,以納秒表示,為整數(shù)。
-
st_mtime_ns? 最近的修改時間,以納秒表示,為整數(shù)。
-
st_ctime_ns? 取決于平臺:
在 Unix 上表示最近的元數(shù)據(jù)更改時間,
在 Windows 上表示創(chuàng)建時間,以納秒表示,為整數(shù)。
注解
st_atime、st_mtime和st_ctime屬性的確切含義和分辨率取決于操作系統(tǒng)和文件系統(tǒng)。例如,在使用 FAT 或 FAT32 文件系統(tǒng)的 Windows 上,st_mtime有 2 秒的分辨率,而st_atime僅有 1 天的分辨率。詳細信息請參閱操作系統(tǒng)文檔。類似地,盡管
st_atime_ns、st_mtime_ns和st_ctime_ns始終以納秒表示,但許多系統(tǒng)并不提供納秒精度。在確實提供納秒精度的系統(tǒng)上,用于存儲st_atime、st_mtime和st_ctime的浮點對象無法保留所有精度,因此不夠精確。如果需要確切的時間戳,則應(yīng)始終使用st_atime_ns、st_mtime_ns和st_ctime_ns。在某些 Unix 系統(tǒng)上(如 Linux 上),以下屬性可能也可用:
-
st_blksize? “首選的” 塊大小,用于提高文件系統(tǒng) I/O 效率。寫入文件時塊大小太小可能會導(dǎo)致讀取-修改-重寫效率低下。
-
st_rdev? 設(shè)備類型(如果是 inode 設(shè)備)。
-
st_flags? 用戶定義的文件標志位。
在其他 Unix 系統(tǒng)上(如 FreeBSD 上),以下屬性可能可用(但僅當 root 使用它們時才被填充):
-
st_gen? 文件生成號。
-
st_birthtime? 文件創(chuàng)建時間。
在 Solaris 及其衍生版本上,以下屬性可能也可用:
-
st_fstype? 文件所在文件系統(tǒng)的類型的唯一標識,為字符串。
在 Mac OS 系統(tǒng)上,以下屬性可能也可用:
-
st_rsize? 文件的實際大小。
-
st_creator? 文件的創(chuàng)建者。
-
st_type? 文件類型。
On Windows systems, the following attribute is also available:
-
st_file_attributes? Windows 文件屬性:
dwFileAttributes,由GetFileInformationByHandle()返回的BY_HANDLE_FILE_INFORMATION結(jié)構(gòu)體的成員之一。請參閱stat模塊中的FILE_ATTRIBUTE_*常量。
標準模塊
stat中定義了函數(shù)和常量,這些函數(shù)和常量可用于從stat結(jié)構(gòu)體中提取信息。(在 Windows 上,某些項填充的是虛值。)為了向后兼容,一個
stat_result實例還可以作為至少包含 10 個整數(shù)的元組訪問,以提供stat結(jié)構(gòu)中最重要(和可移植)的成員,整數(shù)順序為st_mode,st_ino,st_dev,st_nlink,st_uid,st_gid,st_size,st_atime,st_mtime,st_ctime。某些實現(xiàn)可能在末尾還有更多項。為了與舊版 Python 兼容,以元組形式訪問stat_result始終返回整數(shù)。3.3 新版功能: 添加了
st_atime_ns、st_mtime_ns和st_ctime_ns成員。3.5 新版功能: 在 Windows 上添加了
st_file_attributes成員。在 3.5 版更改: 在 Windows 上,如果可用,會返回文件索引作為
st_ino的值。3.7 新版功能: 在 Solaris 及其衍生版本上添加了
st_fstype成員。-
-
os.statvfs(path)? 在所給的路徑上執(zhí)行
statvfs()系統(tǒng)調(diào)用。返回值是一個對象,其屬性描述了所給路徑上的文件系統(tǒng),并且與statvfs結(jié)構(gòu)體的成員相對應(yīng),即:f_bsize,f_frsize,f_blocks,f_bfree,f_bavail,f_files,f_ffree,f_favail,f_flag,f_namemax,f_fsid。為
f_flag屬性位定義了兩個模塊級常量:如果存在ST_RDONLY位,則文件系統(tǒng)以只讀掛載;如果存在ST_NOSUID位,則文件系統(tǒng)禁用或不支持 setuid/setgid 位。為基于 GNU/glibc 的系統(tǒng)還定義了額外的模塊級常量。它們是
ST_NODEV(禁止訪問設(shè)備專用文件),ST_NOEXEC(禁止執(zhí)行程序),ST_SYNCHRONOUS(寫入后立即同步),ST_MANDLOCK(允許文件系統(tǒng)上的強制鎖定),ST_WRITE(寫入文件/目錄/符號鏈接),ST_APPEND(僅追加文件),ST_IMMUTABLE(不可變文件),ST_NOATIME(不更新訪問時間),ST_NODIRATIME(不更新目錄訪問時間),ST_RELATIME(相對于 mtime/ctime 更新訪問時間)。本函數(shù)支持 指定文件描述符為參數(shù)。
可用性: Unix。
在 3.2 版更改: 添加了
ST_RDONLY和ST_NOSUID常量。3.3 新版功能: Added support for specifying an open file descriptor for path.
在 3.4 版更改: 添加了
ST_NODEV、ST_NOEXEC、ST_SYNCHRONOUS、ST_MANDLOCK、ST_WRITE、ST_APPEND、ST_IMMUTABLE、ST_NOATIME、ST_NODIRATIME和ST_RELATIME常量。在 3.6 版更改: 接受一個 path-like object。
3.7 新版功能: 添加了
f_fsid。
-
os.supports_dir_fd? A
Setobject indicating which functions in theosmodule permit use of their dir_fd parameter. Different platforms provide different functionality, and an option that might work on one might be unsupported on another. For consistency's sakes, functions that support dir_fd always allow specifying the parameter, but will raise an exception if the functionality is not actually available.To check whether a particular function permits use of its dir_fd parameter, use the
inoperator onsupports_dir_fd. As an example, this expression determines whether the dir_fd parameter ofos.stat()is locally available:os.stat in os.supports_dir_fd
目前 dir_fd 參數(shù)僅在 Unix 平臺上有效,在 Windows 上均無效。
3.3 新版功能.
-
os.supports_effective_ids? A
Setobject indicating which functions in theosmodule permit use of the effective_ids parameter foros.access(). If the local platform supports it, the collection will containos.access(), otherwise it will be empty.To check whether you can use the effective_ids parameter for
os.access(), use theinoperator onsupports_effective_ids, like so:os.access in os.supports_effective_ids
Currently effective_ids only works on Unix platforms; it does not work on Windows.
3.3 新版功能.
-
os.supports_fd? A
Setobject indicating which functions in theosmodule permit specifying their path parameter as an open file descriptor. Different platforms provide different functionality, and an option that might work on one might be unsupported on another. For consistency's sakes, functions that support fd always allow specifying the parameter, but will raise an exception if the functionality is not actually available.To check whether a particular function permits specifying an open file descriptor for its path parameter, use the
inoperator onsupports_fd. As an example, this expression determines whetheros.chdir()accepts open file descriptors when called on your local platform:os.chdir in os.supports_fd
3.3 新版功能.
-
os.supports_follow_symlinks? A
Setobject indicating which functions in theosmodule permit use of their follow_symlinks parameter. Different platforms provide different functionality, and an option that might work on one might be unsupported on another. For consistency's sakes, functions that support follow_symlinks always allow specifying the parameter, but will raise an exception if the functionality is not actually available.To check whether a particular function permits use of its follow_symlinks parameter, use the
inoperator onsupports_follow_symlinks. As an example, this expression determines whether the follow_symlinks parameter ofos.stat()is locally available:os.stat in os.supports_follow_symlinks
3.3 新版功能.
-
os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)? 創(chuàng)建一個指向 src 的符號鏈接,名為 dst。
在 Windows 上,符號鏈接可以表示文件或目錄兩種類型,并且不會動態(tài)改變類型。如果目標存在,則新建鏈接的類型將與目標一致。否則,如果 target_is_directory 為
True,則符號鏈接將創(chuàng)建為目錄鏈接,為False(默認)將創(chuàng)建為文件鏈接。在非 Windows 平臺上,target_is_directory 被忽略。Symbolic link support was introduced in Windows 6.0 (Vista).
symlink()will raise aNotImplementedErroron Windows versions earlier than 6.0.本函數(shù)支持 基于目錄描述符的相對路徑。
注解
On Windows, the SeCreateSymbolicLinkPrivilege is required in order to successfully create symlinks. This privilege is not typically granted to regular users but is available to accounts which can escalate privileges to the administrator level. Either obtaining the privilege or running your application as an administrator are ways to successfully create symlinks.
當本函數(shù)由非特權(quán)賬戶調(diào)用時,拋出
OSError異常。可用性: Unix, Windows。
在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。
3.3 新版功能: 添加了 dir_fd 參數(shù),現(xiàn)在在非 Windows 平臺上允許 target_is_directory 參數(shù)。
在 3.6 版更改: 接受一個 類路徑對象 作為 src 和 dst。
-
os.truncate(path, length)? 截斷 path 對應(yīng)的文件,以使其最大為 length 字節(jié)大小。
本函數(shù)支持 指定文件描述符為參數(shù)。
可用性: Unix, Windows。
3.3 新版功能.
在 3.5 版更改: 添加了 Windows 支持
在 3.6 版更改: 接受一個 path-like object。
-
os.unlink(path, *, dir_fd=None)? 移除(刪除)文件 path。該函數(shù)在語義上與
remove()相同,unlink是其傳統(tǒng)的 Unix 名稱。請參閱remove()的文檔以獲取更多信息。3.3 新版功能: dir_fd 參數(shù)。
在 3.6 版更改: 接受一個 path-like object。
-
os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)? 設(shè)置文件 path 的訪問時間和修改時間。
utime()有 times 和 ns 兩個可選參數(shù),它們指定了設(shè)置給 path 的時間,用法如下:如果指定 ns,它必須是一個
(atime_ns, mtime_ns)形式的二元組,其中每個成員都是一個表示納秒的整數(shù)。如果 times 不為
None,則它必須是(atime, mtime)形式的二元組,其中每個成員都是一個表示秒的 int 或 float。如果 times 為
None且未指定 ns,則相當于指定ns=(atime_ns, mtime_ns),其中兩個時間均為當前時間。
同時為 times 和 ns 指定元組會出錯。
Whether a directory can be given for path depends on whether the operating system implements directories as files (for example, Windows does not). Note that the exact times you set here may not be returned by a subsequent
stat()call, depending on the resolution with which your operating system records access and modification times; seestat(). The best way to preserve exact times is to use the st_atime_ns and st_mtime_ns fields from theos.stat()result object with the ns parameter to utime.本函數(shù)支持指定 指定文件描述符為參數(shù)、基于目錄描述符的相對路徑 和 不跟蹤符號鏈接。
3.3 新版功能: Added support for specifying an open file descriptor for path, and the dir_fd, follow_symlinks, and ns parameters.
在 3.6 版更改: 接受一個 path-like object。
-
os.walk(top, topdown=True, onerror=None, followlinks=False)? 生成目錄樹中的文件名,方式是按上->下或下->上順序瀏覽目錄樹。對于以 top 為根的目錄樹中的每個目錄(包括 top 本身),它都會生成一個三元組
(dirpath, dirnames, filenames)。dirpath 是一個字符串,表示目錄的路徑。dirnames 是一個列表,內(nèi)含 dirpath 中子目錄的名稱(不包括
'.'和'..')。filenames 也是列表,內(nèi)含 dirpath 中非目錄文件的名稱。注意,列表中的名稱不包含路徑部分。要獲取 dirpath 中文件或目錄的完整路徑(從 top 起始),請執(zhí)行os.path.join(dirpath, name)。如果可選參數(shù) topdown 為
True或未指定,則在所有子目錄的三元組之前生成父目錄的三元組(目錄是自上而下生成的)。如果 topdown 為False,則在所有子目錄的三元組生成之后再生成父目錄的三元組(目錄是自下而上生成的)。無論 topdown 為何值,在生成目錄及其子目錄的元組之前,都將檢索全部子目錄列表。當 topdown 為
True時,調(diào)用者可以就地修改 dirnames 列表(也許用到了del或切片),而walk()將僅僅遞歸到仍保留在 dirnames 中的子目錄內(nèi)。這可用于減少搜索、加入特定的訪問順序,甚至可在繼續(xù)walk()之前告知walk()由調(diào)用者新建或重命名的目錄的信息。當 topdown 為False時,修改 dirnames 對 walk 的行為沒有影響,因為在自下而上模式中,dirnames 中的目錄是在 dirpath 本身之前生成的。默認將忽略
scandir()調(diào)用中的錯誤。如果指定了可選參數(shù) onerror,它應(yīng)該是一個函數(shù)。出錯時它會被調(diào)用,參數(shù)是一個OSError實例。它可以報告錯誤然后繼續(xù)遍歷,或者拋出異常然后中止遍歷。注意,可以從異常對象的filename屬性中獲取出錯的文件名。walk()默認不會遞歸進指向目錄的符號鏈接??梢栽谥С址栨溄拥南到y(tǒng)上將 followlinks 設(shè)置為True,以訪問符號鏈接指向的目錄。注解
注意,如果鏈接指向自身的父目錄,則將 followlinks 設(shè)置為
True可能導(dǎo)致無限遞歸。walk()不會記錄它已經(jīng)訪問過的目錄。下面的示例遍歷起始目錄內(nèi)所有子目錄,打印每個目錄內(nèi)的文件占用的字節(jié)數(shù),CVS 子目錄不會被遍歷:
import os from os.path import join, getsize for root, dirs, files in os.walk('python/Lib/email'): print(root, "consumes", end=" ") print(sum(getsize(join(root, name)) for name in files), end=" ") print("bytes in", len(files), "non-directory files") if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories
在下一個示例(
shutil.rmtree()的簡單實現(xiàn))中,必須使樹自下而上,因為rmdir()只允許在目錄為空時刪除目錄:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))
在 3.5 版更改: 現(xiàn)在,本函數(shù)調(diào)用的是
os.scandir()而不是os.listdir(),從而減少了調(diào)用os.stat()的次數(shù)而變得更快。在 3.6 版更改: 接受一個 path-like object。
-
os.fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)? 本方法的行為與
walk()完全一樣,除了它產(chǎn)生的是 4 元組(dirpath, dirnames, filenames, dirfd),并且它支持dir_fd。dirpath、dirnames 和 filenames 與
walk()輸出的相同,dirfd 是指向目錄 dirpath 的文件描述符。本函數(shù)始終支持 基于目錄描述符的相對路徑 和 不跟蹤符號鏈接。但是請注意,與其他函數(shù)不同,
fwalk()的 follow_symlinks 的默認值為False。下面的示例遍歷起始目錄內(nèi)所有子目錄,打印每個目錄內(nèi)的文件占用的字節(jié)數(shù),CVS 子目錄不會被遍歷:
import os for root, dirs, files, rootfd in os.fwalk('python/Lib/email'): print(root, "consumes", end="") print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]), end="") print("bytes in", len(files), "non-directory files") if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories
在下一個示例中,必須使樹自下而上遍歷,因為
rmdir()只允許在目錄為空時刪除目錄:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files, rootfd in os.fwalk(top, topdown=False): for name in files: os.unlink(name, dir_fd=rootfd) for name in dirs: os.rmdir(name, dir_fd=rootfd)
可用性: Unix。
3.3 新版功能.
在 3.6 版更改: 接受一個 path-like object。
在 3.7 版更改: 添加了對
bytes類型路徑的支持。
Linux 擴展屬性?
3.3 新版功能.
這些函數(shù)僅在 Linux 上可用。
-
os.getxattr(path, attribute, *, follow_symlinks=True)? 返回 path 的擴展文件系統(tǒng)屬性 attribute 的值。attribute 可以是 bytes 或 str (直接/間接通過
PathLike接口返回的)。如果是 str,則使用文件系統(tǒng)編碼來編碼字符串。本函數(shù)支持 指定文件描述符為參數(shù) 和 不跟蹤符號鏈接。
在 3.6 版更改: 接受一個 類路徑對象 作為 path 和 attribute。
-
os.listxattr(path=None, *, follow_symlinks=True)? 返回一個列表,包含 path 的所有擴展文件系統(tǒng)屬性。列表中的屬性都表示為字符串,它們是根據(jù)文件系統(tǒng)編碼解碼出來的。如果 path 為
None,則listxattr()將檢查當前目錄。本函數(shù)支持 指定文件描述符為參數(shù) 和 不跟蹤符號鏈接。
在 3.6 版更改: 接受一個 path-like object。
-
os.removexattr(path, attribute, *, follow_symlinks=True)? 從 path 中刪除擴展文件系統(tǒng)屬性 attribute。attribute 應(yīng)該是 bytes 或 str (直接/間接通過
PathLike接口返回的)。如果是字符串,則它應(yīng)使用文件系統(tǒng)編碼來編碼。本函數(shù)支持 指定文件描述符為參數(shù) 和 不跟蹤符號鏈接。
在 3.6 版更改: 接受一個 類路徑對象 作為 path 和 attribute。
-
os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)? 將 path 的擴展文件系統(tǒng)屬性 attribute 設(shè)置為 value。attribute 必須是沒有空字符的 bytes 或 str (直接傳入或通過
PathLike接口間接傳入)。如果是 str,則應(yīng)使用文件系統(tǒng)編碼進行編碼。flags 可以是XATTR_REPLACE或XATTR_CREATE。如果指定XATTR_REPLACE而該屬性不存在,則拋出EEXISTS異常。如果指定XATTR_CREATE而該屬性已經(jīng)存在,則不會創(chuàng)建該屬性,拋出ENODATA異常。本函數(shù)支持 指定文件描述符為參數(shù) 和 不跟蹤符號鏈接。
注解
Linux kernel 2.6.39 以下版本的一個 bug 導(dǎo)致在某些文件系統(tǒng)上,flags 參數(shù)會被忽略。
在 3.6 版更改: 接受一個 類路徑對象 作為 path 和 attribute。
-
os.XATTR_SIZE_MAX? 一條擴展屬性的值的最大大小。在當前的 Linux 上是 64 KiB。
-
os.XATTR_CREATE? 這是
setxattr()的 flags 參數(shù)的可取值,它表示該操作必須創(chuàng)建一個屬性。
-
os.XATTR_REPLACE? 這是
setxattr()的 flags 參數(shù)的可取值,它表示該操作必須替換現(xiàn)有屬性。
進程管理?
下列函數(shù)可用于創(chuàng)建和管理進程。
所有 exec* 函數(shù)都接受一個參數(shù)列表,用來給新程序加載到它的進程中。在所有情況下,傳遞給新程序的第一個參數(shù)是程序本身的名稱,而不是用戶在命令行上輸入的參數(shù)。對于 C 程序員來說,這就是傳遞給 main() 函數(shù)的 argv[0]。例如,os.execv('/bin/echo', ['foo', 'bar']) 只會在標準輸出上打印 bar,而 foo 會被忽略。
-
os.abort()? 發(fā)送
SIGABRT信號到當前進程。在 Unix 上,默認行為是生成一個核心轉(zhuǎn)儲。在 Windows 上,該進程立即返回退出代碼3。請注意,使用signal.signal()可以為SIGABRT注冊 Python 信號處理程序,而調(diào)用本函數(shù)將不會調(diào)用按前述方法注冊的程序。
-
os.execl(path, arg0, arg1, ...)? -
os.execle(path, arg0, arg1, ..., env)? -
os.execlp(file, arg0, arg1, ...)? -
os.execlpe(file, arg0, arg1, ..., env)? -
os.execv(path, args)? -
os.execve(path, args, env)? -
os.execvp(file, args)? -
os.execvpe(file, args, env)? 這些函數(shù)都將執(zhí)行一個新程序,以替換當前進程。它們沒有返回值。在 Unix 上,新程序會加載到當前進程中,且進程號與調(diào)用者相同。過程中的錯誤會被報告為
OSError異常。當前進程會被立即替換。打開的文件對象和描述符都不會刷新,因此如果這些文件上可能緩沖了數(shù)據(jù),則應(yīng)在調(diào)用
exec*函數(shù)之前使用sys.stdout.flush()或os.fsync()刷新它們。exec*函數(shù)的 "l" 和 "v" 變體不同在于命令行參數(shù)的傳遞方式。如果在編碼時固定了參數(shù)數(shù)量,則 "l" 變體可能是最方便的,各參數(shù)作為execl*()函數(shù)的附加參數(shù)傳入即可。當參數(shù)數(shù)量可變時,"v" 變體更方便,參數(shù)以列表或元組的形式作為 args 參數(shù)傳遞。在這兩種情況下,子進程的第一個參數(shù)都應(yīng)該是即將運行的命令名稱,但這不是強制性的。結(jié)尾包含 "p"?的變體(
execlp()、execlpe()、execvp()和execvpe())將使用PATH環(huán)境變量來查找程序 file。當環(huán)境被替換時(使用下一段討論的exec*e變體之一),PATH變量將來自于新環(huán)境。其他變體execl()、execle()、execv()和execve()不使用PATH變量來查找程序,因此 path 必須包含正確的絕對或相對路徑。對于
execle()、execlpe()、execve()和execvpe()(都以 "e" 結(jié)尾),env 參數(shù)是一個映射,用于定義新進程的環(huán)境變量(代替當前進程的環(huán)境變量)。而函數(shù)execl()、execlp()、execv()和execvp()會將當前進程的環(huán)境變量過繼給新進程。某些平臺上的
execve()可以將 path 指定為打開的文件描述符。當前平臺可能不支持此功能,可以使用os.supports_fd檢查它是否支持。如果不可用,則使用它會拋出NotImplementedError異常。可用性: Unix, Windows。
3.3 新版功能: Added support for specifying an open file descriptor for path for
execve().在 3.6 版更改: 接受一個 path-like object。
-
os._exit(n)? 以狀態(tài)碼 n 退出進程,不會調(diào)用清理處理程序,不會刷新 stdio,等等。
以下是已定義的退出代碼,可以用于 _exit(),盡管它們不是必需的。這些退出代碼通常用于 Python 編寫的系統(tǒng)程序,例如郵件服務(wù)器的外部命令傳遞程序。
注解
其中部分退出代碼在部分 Unix 平臺上可能不可用,因為平臺間存在差異。如果底層平臺定義了這些常量,那上層也會定義。
-
os.fork()? Fork 出一個子進程。在子進程中返回
0,在父進程中返回子進程的進程號。如果發(fā)生錯誤,則拋出OSError異常。Note that some platforms including FreeBSD <= 6.3 and Cygwin have known issues when using fork() from a thread.
警告
有關(guān) SSL 模塊與 fork() 結(jié)合的應(yīng)用,請參閱
ssl。可用性: Unix。
-
os.forkpty()? Fork 出一個子進程,使用新的偽終端作為子進程的控制終端。返回一對
(pid, fd),其中 pid 在子進程中為0,這是父進程中新子進程的進程號,而 fd 是偽終端主設(shè)備的文件描述符。對于更便于移植的方法,請使用pty模塊。如果發(fā)生錯誤,則拋出OSError異常。可用性: 某些 Unix。
-
os.kill(pid, sig)? 將信號 sig 發(fā)送至進程 pid。特定平臺上可用的信號常量定義在
signal模塊中。Windows:
signal.CTRL_C_EVENT和signal.CTRL_BREAK_EVENT信號是特殊信號,只能發(fā)送給共享同一個控制臺窗口的控制臺進程,如某些子進程。sig 取任何其他值將導(dǎo)致該進程被 TerminateProcess API 無條件終止,且退出代碼為 sig。Windows 版本的kill()還需要傳入待結(jié)束進程的句柄。另請參閱
signal.pthread_kill()。3.2 新版功能: Windows 支持。
-
os.popen(cmd, mode='r', buffering=-1)? 打開一個管道,它通往 / 接受自命令 cmd。返回值是連接到管道的文件對象,根據(jù) mode 是
'r'(默認)還是'w'決定該對象可以讀取還是寫入。buffering 參數(shù)與內(nèi)置函數(shù)open()相應(yīng)的參數(shù)含義相同。返回的文件對象只能讀寫文本字符串,不能是字節(jié)類型。如果子進程成功退出,則
close方法返回None。如果發(fā)生錯誤,則返回子進程的返回碼。在 POSIX 系統(tǒng)上,如果返回碼為正,則它就是進程返回值左移一個字節(jié)后的值。如果返回碼為負,則進程是被信號終止的,返回碼取反后就是該信號。(例如,如果子進程被終止,則返回值可能是- signal.SIGKILL。)在 Windows 系統(tǒng)上,返回值包含子進程的返回碼(有符號整數(shù))。本方法是使用
subprocess.Popen實現(xiàn)的,如需更強大的方法來管理和溝通子進程,請參閱該類的文檔。
-
os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)? 注冊可調(diào)用對象,在使用
os.fork()或類似的進程克隆 API 派生新的子進程時,這些對象會運行。參數(shù)是可選的,且為僅關(guān)鍵字 (Keyword-only) 參數(shù)。每個參數(shù)指定一個不同的調(diào)用點。before 是一個函數(shù),在 fork 子進程前調(diào)用。
after_in_parent 是一個函數(shù),在 fork 子進程后從父進程調(diào)用。
after_in_child 是一個函數(shù),從子進程中調(diào)用。
只有希望控制權(quán)回到 Python 解釋器時,才進行這些調(diào)用。典型的
子進程啟動時不會觸發(fā)它們,因為子進程不會重新進入解釋器。在注冊的函數(shù)中,用于 fork 前運行的函數(shù)將按與注冊相反的順序調(diào)用。用于 fork 后(從父進程或子進程)運行的函數(shù)按注冊順序調(diào)用。
注意,第三方 C 代碼的
fork()調(diào)用可能不會調(diào)用這些函數(shù),除非它顯式調(diào)用了PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。函數(shù)注冊后無法注銷。
可用性: Unix。
3.7 新版功能.
-
os.spawnl(mode, path, ...)? -
os.spawnle(mode, path, ..., env)? -
os.spawnlp(mode, file, ...)? -
os.spawnlpe(mode, file, ..., env)? -
os.spawnv(mode, path, args)? -
os.spawnve(mode, path, args, env)? -
os.spawnvp(mode, file, args)? -
os.spawnvpe(mode, file, args, env)? 在新進程中執(zhí)行程序 path。
(注意,
subprocess模塊提供了更強大的工具來生成新進程并跟蹤執(zhí)行結(jié)果,使用該模塊比使用這些函數(shù)更好。尤其應(yīng)當檢查 使用 subprocess 模塊替換舊函數(shù) 部分。)mode 為
P_NOWAIT時,本函數(shù)返回新進程的進程號。mode 為P_WAIT時,如果進程正常退出,返回退出代碼,如果被殺死,返回-signal,其中 signal 是殺死進程的信號。在 Windows 上,進程號實際上是進程句柄,因此可以與waitpid()函數(shù)一起使用。spawn*函數(shù)的 "l" 和 "v" 變體不同在于命令行參數(shù)的傳遞方式。如果在編碼時固定了參數(shù)數(shù)量,則 "l" 變體可能是最方便的,各參數(shù)作為spawnl*()函數(shù)的附加參數(shù)傳入即可。當參數(shù)數(shù)量可變時,"v" 變體更方便,參數(shù)以列表或元組的形式作為 args 參數(shù)傳遞。在這兩種情況下,子進程的第一個參數(shù)都必須是即將運行的命令名稱。結(jié)尾包含第二個 "p" 的變體(
spawnlp()、spawnlpe()、spawnvp()和spawnvpe())將使用PATH環(huán)境變量來查找程序 file。當環(huán)境被替換時(使用下一段討論的spawn*e變體之一),PATH變量將來自于新環(huán)境。其他變體spawnl()、spawnle()、spawnv()和spawnve()不使用PATH變量來查找程序,因此 path 必須包含正確的絕對或相對路徑。對于
spawnle()、spawnlpe()、spawnve()和spawnvpe()(都以 "e" 結(jié)尾),env 參數(shù)是一個映射,用于定義新進程的環(huán)境變量(代替當前進程的環(huán)境變量)。而函數(shù)spawnl()、spawnlp()、spawnv()和spawnvp()會將當前進程的環(huán)境變量過繼給新進程。注意,env 字典中的鍵和值必須是字符串。無效的鍵或值將導(dǎo)致函數(shù)出錯,返回值為127。例如,以下對
spawnlp()和spawnvpe()的調(diào)用是等效的:import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
可用性: Unix, Windows。
spawnlp()、spawnlpe()、spawnvp()和spawnvpe()在 Windows 上不可用。spawnle()和spawnve()在 Windows 上不是線程安全的,建議使用subprocess模塊替代。在 3.6 版更改: 接受一個 path-like object。
-
os.P_NOWAIT? -
os.P_NOWAITO? spawn*系列函數(shù)的 mode 參數(shù)的可取值。如果給出這些值中的任何一個,則spawn*()函數(shù)將在創(chuàng)建新進程后立即返回,且返回值為進程號。可用性: Unix, Windows。
-
os.P_WAIT? spawn*系列函數(shù)的 mode 參數(shù)的可取值。如果將 mode 指定為該值,則spawn*()函數(shù)將在新進程運行完畢后返回,運行成功則返回進程的退出代碼,被信號終止則返回-signal。可用性: Unix, Windows。
-
os.P_DETACH? -
os.P_OVERLAY? spawn*系列函數(shù)的 mode 參數(shù)的可取值。它們比上面列出的值可移植性差。P_DETACH與P_NOWAIT相似,但是新進程會與父進程的控制臺脫離。使用P_OVERLAY則會替換當前進程,spawn*函數(shù)將不會返回。可用性: Windows。
-
os.startfile(path[, operation])? 使用已關(guān)聯(lián)的應(yīng)用程序打開文件。
當 operation 未指定或指定為
'open'時,這類似于在 Windows 資源管理器中雙擊文件,或在交互式命令行中將文件名作為 start 命令的參數(shù):通過擴展名相關(guān)聯(lián)的應(yīng)用程序(如果有)打開文件。當指定另一個 operation 時,它必須是一個“命令動詞” ("command verb"),該詞指定對文件執(zhí)行的操作。Microsoft 文檔中的常用動詞有
'print'和'edit'(用于文件),以及'explore'和'find'(用于目錄)。關(guān)聯(lián)的應(yīng)用程序啟動后
startfile()就會立即返回。 本函數(shù)沒有等待應(yīng)用程序關(guān)閉的選項,也沒有辦法檢索應(yīng)用程序的退出狀態(tài)。 path 形參是基于當前目錄的相對路徑。 如果要使用絕對路徑,請確保第一個字符不是斜杠 ('/');如果是斜杠的話則底層的 Win32ShellExecute()函數(shù)將失效。 請使用os.path.normpath()函數(shù)來確保路徑已針對 Win32 正確編碼。為了減少解釋器的啟動開銷,直到第一次調(diào)用本函數(shù)后,才解析 Win32
ShellExecute()函數(shù)。如果無法解析該函數(shù)??,則拋出NotImplementedError異常。可用性: Windows。
-
os.system(command)? 在子 shell 中執(zhí)行命令(字符串)。這是調(diào)用標準 C 函數(shù)
system()來實現(xiàn)的,因此限制條件與該函數(shù)相同。對sys.stdin等的更改不會反映在執(zhí)行命令的環(huán)境中。command 產(chǎn)生的任何輸出將被發(fā)送到解釋器標準輸出流。在 Unix 上,返回值是進程的退出狀態(tài),編碼格式與為
wait()指定的格式相同。注意,POSIX 沒有指定 C 函數(shù)system()返回值的含義,因此 Python 函數(shù)的返回值與系統(tǒng)有關(guān)。在 Windows 上,返回值是運行 command 后系統(tǒng) Shell 返回的值。該 Shell 由 Windows 環(huán)境變量
COMSPEC: 給出:通常是 cmd.exe,它會返回命令的退出狀態(tài)。在使用非原生 Shell 的系統(tǒng)上,請查閱 Shell 的文檔。subprocess模塊提供了更強大的工具來生成新進程并跟蹤執(zhí)行結(jié)果,使用該模塊比使用本函數(shù)更好。參閱subprocess文檔中的 使用 subprocess 模塊替換舊函數(shù) 部分以獲取有用的幫助。可用性: Unix, Windows。
-
os.times()? 返回當前的全局進程時間。返回值是一個有 5 個屬性的對象:
user- 用戶時間system- 系統(tǒng)時間children_user- 所有子進程的用戶時間children_system- 所有子進程的系統(tǒng)時間elapsed- 從過去的固定時間點起,經(jīng)過的真實時間
為了向后兼容,該對象的行為也類似于五元組,按照
user,system,children_user,children_system和elapsed順序組成。在 Unix 上請參閱 times(2) 和 times(3) 手冊頁,在 Windows 上請參閱 the GetProcessTimes MSDN 。在 Windows 上,只有
user和system是已知的,其他屬性均為零。可用性: Unix, Windows。
在 3.3 版更改: 返回結(jié)果的類型由元組變成一個類似元組的對象,同時具有命名的屬性。
-
os.wait()? 等待子進程執(zhí)行完畢,返回一個元組,包含其 pid 和退出狀態(tài)指示:一個 16 位數(shù)字,其低字節(jié)是終止該進程的信號編號,高字節(jié)是退出狀態(tài)碼(信號編號為零的情況下),如果生成了核心文件,則低字節(jié)的高位會置位。
可用性: Unix。
-
os.waitid(idtype, id, options)? 等待一個或多個子進程執(zhí)行完畢。idtype 可以是
P_PID、P_PGID或P_ALL。id 指定要等待的 pid。options 是由WEXITED、WSTOPPED或WCONTINUED中的一個或多個進行或運算構(gòu)造的,且額外可以與WNOHANG或WNOWAIT進行或運算。返回值是一個對象,對應(yīng)著siginfo_t結(jié)構(gòu)體中的數(shù)據(jù),即:si_pid,si_uid,si_signo,si_status,si_code或None(如果指定了WNOHANG且沒有子進程處于等待狀態(tài))。可用性: Unix。
3.3 新版功能.
-
os.P_PID? -
os.P_PGID? -
os.P_ALL? waitid()函數(shù)的 idtype 參數(shù)的可取值。它們影響 id 的解釋方式。可用性: Unix。
3.3 新版功能.
-
os.WEXITED? -
os.WSTOPPED? -
os.WNOWAIT? 用于
waitid()的 options 參數(shù)的標志位,指定要等待的子進程信號。可用性: Unix。
3.3 新版功能.
-
os.CLD_EXITED? -
os.CLD_DUMPED? -
os.CLD_TRAPPED? -
os.CLD_CONTINUED? waitid()返回的結(jié)果中,si_code的可取值。可用性: Unix。
3.3 新版功能.
-
os.waitpid(pid, options)? 本函數(shù)的細節(jié)在 Unix 和 Windows 上有不同之處。
在 Unix 上:等待進程號為 pid 的子進程執(zhí)行完畢,返回一個元組,內(nèi)含其進程 ID 和退出狀態(tài)指示(編碼與
wait()相同)。調(diào)用的語義受整數(shù) options 的影響,常規(guī)操作下該值應(yīng)為0。如果 pid 大于
0,則waitpid()會獲取該指定進程的狀態(tài)信息。如果 pid 為0,則獲取當前進程所在進程組中的所有子進程的狀態(tài)。如果 pid 為-1,則獲取當前進程的子進程狀態(tài)。如果 pid 小于-1,則獲取進程組-pid( pid 的絕對值)中所有進程的狀態(tài)。當系統(tǒng)調(diào)用返回 -1 時,將拋出帶有錯誤碼的
OSError異常。在 Windows 上:等待句柄為 pid 的進程執(zhí)行完畢,返回一個元組,內(nèi)含 pid 以及左移 8 位后的退出狀態(tài)(移位簡化了跨平臺使用本函數(shù))。小于或等于
0的 pid 在 Windows 上沒有特殊含義,且會拋出異常。整數(shù)值 options 無效。pid 可以指向任何 ID 已知的進程,不一定是子進程。調(diào)用spawn*函數(shù)時傳入P_NOWAIT將返回合適的進程句柄。在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號處理程序沒有觸發(fā)異常,此函數(shù)現(xiàn)在會重試系統(tǒng)調(diào)用,而不是觸發(fā)
InterruptedError異常 (原因詳見 PEP 475)。
-
os.wait3(options)? 與
waitpid()相似,差別在于沒有進程 ID 參數(shù),且返回一個 3 元組,其中包括子進程 ID,退出狀態(tài)指示和資源使用信息。關(guān)于資源使用信息的詳情,請參考resource.getrusage()。option 參數(shù)與傳入waitpid()和wait4()的相同。可用性: Unix。
-
os.wait4(pid, options)? 與
waitpid()相似,差別在本方法返回一個 3 元組,其中包括子進程 ID,退出狀態(tài)指示和資源使用信息。關(guān)于資源使用信息的詳情,請參考resource.getrusage()。wait4()的參數(shù)與waitpid()的參數(shù)相同。可用性: Unix。
下列函數(shù)采用進程狀態(tài)碼作為參數(shù),狀態(tài)碼由 system()、wait() 或 waitpid() 返回。它們可用于確定進程上發(fā)生的操作。
-
os.WCOREDUMP(status)? 如果為該進程生成了核心轉(zhuǎn)儲,返回
True,否則返回False。此函數(shù)應(yīng)當僅在
WIFSIGNALED()為真值時使用。可用性: Unix。
-
os.WIFCONTINUED(status)? 如果一個已停止的子進程通過傳送
SIGCONT獲得恢復(fù)(如果該進程是從任務(wù)控制停止后再繼續(xù)的)則返回True,否則返回False。參見
WCONTINUED選項。可用性: Unix。
-
os.WIFSTOPPED(status)? 如果進程是通過傳送一個信號來停止的則返回
True,否則返回False。WIFSTOPPED()只有在當waitpid()調(diào)用是通過使用WUNTRACED選項來完成或者當該進程正被追蹤時 (參見 ptrace(2)) 才返回True。可用性: Unix。
-
os.WIFEXITED(status)? 如果進程正常終止退出則返回
True,也就是說通過調(diào)用exit()或_exit(),或者通過從main()返回;在其他情況下則返回False。可用性: Unix。
-
os.WEXITSTATUS(status)? 返回進程退出狀態(tài)。
此函數(shù)應(yīng)當僅在
WIFEXITED()為真值時使用。可用性: Unix。
-
os.WSTOPSIG(status)? 返回導(dǎo)致進程停止的信號。
此函數(shù)應(yīng)當僅在
WIFSTOPPED()為真值時使用。可用性: Unix。
-
os.WTERMSIG(status)? 返回導(dǎo)致進程終止的信號的編號。
此函數(shù)應(yīng)當僅在
WIFSIGNALED()為真值時使用。可用性: Unix。
調(diào)度器接口?
這些函數(shù)控制操作系統(tǒng)如何為進程分配 CPU 時間。 它們僅在某些 Unix 平臺上可用。 更多細節(jié)信息請查閱你所用 Unix 的指南頁面。
3.3 新版功能.
以下調(diào)度策略如果被操作系統(tǒng)支持就會對外公開。
-
os.SCHED_OTHER? 默認調(diào)度策略。
-
os.SCHED_BATCH? 用于 CPU 密集型進程的調(diào)度策略,它會盡量為計算機中的其余任務(wù)保留交互性。
-
os.SCHED_IDLE? 用于極低優(yōu)先級的后臺任務(wù)的調(diào)度策略。
-
os.SCHED_SPORADIC? 用于偶發(fā)型服務(wù)程序的調(diào)度策略。
-
os.SCHED_FIFO? 先進先出的調(diào)度策略。
-
os.SCHED_RR? 循環(huán)式的調(diào)度策略。
-
os.SCHED_RESET_ON_FORK? 此旗標可與任何其他調(diào)度策略進行 OR 運算。 當帶有此旗標的進程設(shè)置分叉時,其子進程的調(diào)度策略和優(yōu)先級會被重置為默認值。
-
class
os.sched_param(sched_priority)? 這個類表示在
sched_setparam(),sched_setscheduler()和sched_getparam()中使用的可修改調(diào)度形參。 它屬于不可變對象。目前它只有一個可能的形參:
-
sched_priority? 一個調(diào)度策略的調(diào)度優(yōu)先級。
-
-
os.sched_get_priority_min(policy)? 獲取 policy 的最低優(yōu)先級數(shù)值。 policy 是以上調(diào)度策略常量之一。
-
os.sched_get_priority_max(policy)? 獲取 policy 的最高優(yōu)先級數(shù)值。 policy 是以上調(diào)度策略常量之一。
-
os.sched_setscheduler(pid, policy, param)? 根據(jù)進程的 PID pid 設(shè)置其調(diào)度策略。pid 為 0 指的是調(diào)用本方法的進程。policy 是以上調(diào)度策略常量之一。param 是一個
sched_param實例。
-
os.sched_getscheduler(pid)? 返回 PID 為 pid 的進程的調(diào)度策略。pid 為 0 指的是調(diào)用本方法的進程。返回的結(jié)果是以上調(diào)度策略常量之一。
-
os.sched_setparam(pid, param)? 設(shè)置 PID 為 pid 的進程的某個調(diào)度參數(shù)。pid 為 0 指的是調(diào)用本方法的進程。param 是一個
sched_param實例。
-
os.sched_getparam(pid)? 返回 PID 為 pid 的進程的調(diào)度參數(shù)為一個
sched_param實例。pid 為 0 指的是調(diào)用本方法的進程。
-
os.sched_rr_get_interval(pid)? 返回 PID 為 pid 的進程在時間片輪轉(zhuǎn)調(diào)度下的時間片長度(單位為秒)。pid 為 0 指的是調(diào)用本方法的進程。
-
os.sched_yield()? 自愿放棄 CPU。
-
os.sched_setaffinity(pid, mask)? 將 PID 為 pid 的進程(為零則為當前進程)限制到一組 CPU 上。mask 是整數(shù)的可迭代對象,表示應(yīng)將進程限制在其中的一組 CPU。
-
os.sched_getaffinity(pid)? 返回 PID 為 pid 的進程(為零則為當前進程)被限制到的那一組 CPU。
其他系統(tǒng)信息?
-
os.confstr(name)? 返回字符串格式的系統(tǒng)配置信息。name 指定要查找的配置名稱,它可以是字符串,是一個系統(tǒng)已定義的名稱,這些名稱定義在不同標準(POSIX,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱。當前操作系統(tǒng)已定義的名稱在
confstr_names字典的鍵中給出。對于未包含在該映射中的配置名稱,也可以傳遞一個整數(shù)作為 name。如果 name 指定的配置值未定義,返回
None。如果 name 是一個字符串且不是已定義的名稱,將拋出
ValueError異常。如果當前系統(tǒng)不支持 name 指定的配置名稱,即使該名稱存在于confstr_names,也會拋出OSError異常,錯誤碼為errno.EINVAL。可用性: Unix。
-
os.confstr_names? 字典,表示映射關(guān)系,為
confstr()可接受名稱與操作系統(tǒng)為這些名稱定義的整數(shù)值之間的映射。這可用于判斷系統(tǒng)已定義了哪些名稱。可用性: Unix。
-
os.cpu_count()? 返回系統(tǒng)的 CPU 數(shù)量。不確定則返回
None。該數(shù)量不同于當前進程可以使用的CPU數(shù)量??捎玫腃PU數(shù)量可以由
len(os.sched_getaffinity(0))方法獲得。3.4 新版功能.
-
os.sysconf(name)? 返回整數(shù)格式的系統(tǒng)配置信息。如果 name 指定的配置值未定義,返回
-1。對confstr()的 name 參數(shù)的注釋在此處也適用。當前已知的配置名稱在sysconf_names字典中提供。可用性: Unix。
-
os.sysconf_names? 字典,表示映射關(guān)系,為
sysconf()可接受名稱與操作系統(tǒng)為這些名稱定義的整數(shù)值之間的映射。這可用于判斷系統(tǒng)已定義了哪些名稱。可用性: Unix。
以下數(shù)據(jù)值用于支持對路徑本身的操作。所有平臺都有定義。
對路徑的高級操作在 os.path 模塊中定義。
-
os.sep? 操作系統(tǒng)用來分隔路徑不同部分的字符。在 POSIX 上是
'/',在 Windows 上是是'\\'。注意,僅了解它不足以能解析或連接路徑,請使用os.path.split()和os.path.join(),但它有時是有用的。在os.path中也可用。
-
os.altsep? 操作系統(tǒng)用來分隔路徑不同部分的替代字符。如果僅存在一個分隔符,則為
None。在sep是反斜杠的 Windows 系統(tǒng)上,該值被設(shè)為'/'。在os.path中也可用。
-
os.linesep? 當前平臺用于分隔(或終止)行的字符串。它可以是單個字符,如 POSIX 上是
'\n',也可以是多個字符,如 Windows 上是'\r\n'。在寫入以文本模式(默認模式)打開的文件時,請不要使用 os.linesep 作為行終止符,請在所有平臺上都使用一個'\n'代替。
-
os.RTLD_LAZY? -
os.RTLD_NOW? -
os.RTLD_GLOBAL? -
os.RTLD_LOCAL? -
os.RTLD_NODELETE? -
os.RTLD_NOLOAD? -
os.RTLD_DEEPBIND? setdlopenflags()和getdlopenflags()函數(shù)所使用的標志。請參閱 Unix 手冊頁 dlopen(3) 獲取不同標志的含義。3.3 新版功能.
隨機數(shù)?
-
os.getrandom(size, flags=0)? 獲得最多為 size 的隨機字節(jié)。本函數(shù)返回的字節(jié)數(shù)可能少于請求的字節(jié)數(shù)。
這些字節(jié)可用于為用戶空間的隨機數(shù)生成器提供種子,或用于加密目的。
getrandom()依賴于從設(shè)備驅(qū)動程序和其他環(huán)境噪聲源收集的熵。不必要地讀取大量數(shù)據(jù)將對使用/dev/random和/dev/urandom設(shè)備的其他用戶產(chǎn)生負面影響。flags 參數(shù)是一個位掩碼,可以是零個或多個下列值以或運算組合:
os.GRND_RANDOM和GRND_NONBLOCK。另請參閱 Linux getrandom() 手冊頁 。
可用性:Linux 3.17 或更高版本。
3.6 新版功能.
-
os.urandom(size)? 返回大小為 size 的字符串,它是適合加密使用的隨機字節(jié)。
本函數(shù)從系統(tǒng)指定的隨機源獲取隨機字節(jié)。對于加密應(yīng)用程序,返回的數(shù)據(jù)應(yīng)有足夠的不可預(yù)測性,盡管其確切的品質(zhì)取決于操作系統(tǒng)的實現(xiàn)。
在 Linux 上,如果
getrandom()系統(tǒng)調(diào)用可用,它將以阻塞模式使用:阻塞直到系統(tǒng)的 urandom 熵池初始化完畢(內(nèi)核收集了 128 位熵)。原理請參閱 PEP 524。在 Linux 上,getrandom()可以以非阻塞模式使用(使用GRND_NONBLOCK標志)來獲取隨機字節(jié),或者輪詢直到系統(tǒng) urandom 熵池初始化完畢。在類 Unix 系統(tǒng)上,隨機字節(jié)是從
/dev/urandom設(shè)備讀取的。如果/dev/urandom設(shè)備不可用或不可讀,則拋出NotImplementedError異常。在 Windows 上將使用
CryptGenRandom()。參見
secrets模塊提供了更高級的功能。所在平臺會提供隨機數(shù)生成器,有關(guān)其易于使用的接口,請參閱random.SystemRandom。在 3.6.0 版更改: 在 Linux 上,
getrandom()現(xiàn)在以阻塞模式使用,以提高安全性。在 3.5.2 版更改: 在 Linux 上,如果
getrandom()系統(tǒng)調(diào)用阻塞(urandom 熵池尚未初始化完畢),則退回一步讀取/dev/urandom。在 3.5 版更改: 在 Linux 3.17 和更高版本上,現(xiàn)在使用
getrandom()系統(tǒng)調(diào)用(如果可用)。在 OpenBSD 5.6 和更高版本上,現(xiàn)在使用getentropy()C 函數(shù)。這些函數(shù)避免了使用內(nèi)部文件描述符。
-
os.GRND_NONBLOCK? 默認情況下,從
/dev/random讀取時,如果沒有可用的隨機字節(jié),則getrandom()會阻塞;從/dev/urandom讀取時,如果熵池尚未初始化,則會阻塞。如果設(shè)置了
GRND_NONBLOCK標志,則這些情況下getrandom()不會阻塞,而是立即拋出BlockingIOError異常。3.6 新版功能.
-
os.GRND_RANDOM? 如果設(shè)置了此標志位,那么將從
/dev/random池而不是/dev/urandom池中提取隨機字節(jié)。3.6 新版功能.
