os --- 多種操作系統接口?

源代碼: Lib/os.py


本模塊提供了一種使用與操作系統相關(guān)的功能的便捷式途徑。 如果你只是想讀寫(xiě)一個(gè)文件,請參閱 open(),如果你想操作文件路徑,請參閱 os.path 模塊,如果你想讀取通過(guò)命令行給出的所有文件中的所有行,請參閱 fileinput 模塊。 為了創(chuàng )建臨時(shí)文件和目錄,請參閱 tempfile 模塊,對于高級文件和目錄處理,請參閱 shutil 模塊。

關(guān)于這些函數的適用性的說(shuō)明:

  • Python中所有依賴(lài)于操作系統的內置模塊的設計都是這樣,只要不同的操作系統某一相同的功能可用,它就使用相同的接口。例如,函數 os.stat(path) 以相同的格式返回關(guān)于 path 的狀態(tài)信息(該格式源于 POSIX 接口)。

  • 特定于某一操作系統的擴展通過(guò)操作 os 模塊也是可用的,但是使用它們當然是對可移植性的一種威脅。

  • 所有接受路徑或文件名的函數都同時(shí)支持字節串和字符串對象,并在返回路徑或文件名時(shí)使用相應類(lèi)型的對象作為結果。

  • 在 VxWorks 系統上,os.popen, os.fork, os.execv 和 os.spawn*p* 都未支持。

備注

如果使用無(wú)效或無(wú)法訪(fǎng)問(wèn)的文件名與路徑,或者其他類(lèi)型正確但操作系統不接受的參數,此模塊的所有函數都拋出 OSError (或者它的子類(lèi))。

exception os.error?

內建的 OSError 異常的一個(gè)別名。

os.name?

導入的依賴(lài)特定操作系統的模塊的名稱(chēng)。以下名稱(chēng)目前已注冊: 'posix', 'nt', 'java'.

參見(jiàn)

sys.platform 有更詳細的描述. os.uname() 只給出系統提供的版本信息。

platform 模塊對系統的標識有更詳細的檢查。

文件名,命令行參數,以及環(huán)境變量。?

在 Python 中,使用字符串類(lèi)型表示文件名、命令行參數和環(huán)境變量。 在某些系統上,在將這些字符串傳遞給操作系統之前,必須將這些字符串解碼為字節。 Python 使用 filesystem encoding and error handler 來(lái)執行此轉換(請參閱 sys.getfilesystemencoding() )。

filesystem encoding and error handler 是在 Python 啟動(dòng)時(shí)通過(guò) PyConfig_Read() 函數來(lái)配置的:請參閱 PyConfigfilesystem_encodingfilesystem_errors 等成員。

在 3.1 版更改: 在某些系統上,使用文件系統編碼進(jìn)行轉換可能會(huì )失敗。 在這種情況下,Python 會(huì )使用 代理轉義編碼錯誤處理器,這意味著(zhù)在解碼時(shí),不可解碼的字節被 Unicode 字符 U+DCxx 替換,并且這些字節在編碼時(shí)再次轉換為原始字節。

文件系統編碼器 必須保證能成功解碼所有 128 以?xún)鹊淖止?。如果不能保證,API 函數可能觸發(fā) UnicodeError 。

另請參見(jiàn) locale encoding。

Python UTF-8 模式?

3.7 新版功能: 有關(guān)更多詳細信息,請參閱 PEP 540 。

Python UTF-8 模式會(huì )忽略 locale encoding 并強制使用 UTF-8 編碼。

請注意 UTF-8 模式下的標準流設置可以被 PYTHONIOENCODING 所覆蓋(在默認的區域感知模式下也同樣如此)。

作為低層級 API 發(fā)生改變的結果,其他高層級 API 也會(huì )表現出不同的默認行為:

  • 命令行參數,環(huán)境變量和文件名會(huì )使用 UTF-8 編碼來(lái)解碼為文本。

  • os.fsdecode()os.fsencode() 會(huì )使用 UTF-8 編碼。

  • open(), io.open()codecs.open() 默認會(huì )使用 UTF-8 編碼。 但是,它們默認仍將使用嚴格錯誤處理句柄,因此試圖在文本模式下打開(kāi)二進(jìn)制文件將可能引發(fā)異常,而不是生成無(wú)意義的數據。

如果在 Python 啟動(dòng)時(shí) LC_CTYPE 區域設為 CPOSIX ,則啟用 Python UTF-8 模式 (參見(jiàn) PyConfig_Read() 函數)。

它可以通過(guò)命令行選項 -X utf8 和環(huán)境變量 PYTHONUTF8,來(lái)啟用或禁用。

如果沒(méi)有設置 PYTHONUTF8 環(huán)境變量,那么解釋器默認使用當前的地區設置,除非 當前地區識別為基于 ASCII 的傳統地區(如 PYTHONCOERCECLOCALE 所述),并且 locale coercion 被禁用或失敗。在這種傳統地區,除非顯式指明不要如此,解釋器將默認啟用 UTF-8 模式。

Python UTF-8 模式只能在 Python 啟動(dòng)時(shí)啟用。其值可以從 sys.flags.utf8_mode 讀取。

另請參閱 在 Windows 中的 UTF-8 模式filesystem encoding and error handler。

進(jìn)程參數?

這些函數和數據項提供了操作當前進(jìn)程和用戶(hù)的信息。

os.ctermid()?

返回與進(jìn)程控制終端對應的文件名。

可用性: Unix。

os.environ?

A mapping object where keys and values are strings that represent the process environment. For example, environ['HOME'] is the pathname of your home directory (on some platforms), and is equivalent to getenv("HOME") in C.

This mapping is captured the first time the os module is imported, typically during Python startup as part of processing site.py. Changes to the environment made after this time are not reflected in os.environ, except for changes made by modifying os.environ directly.

該映射除了可以用于查詢(xún)環(huán)境外,還能用于修改環(huán)境。當該映射被修改時(shí),將自動(dòng)調用 putenv()。

在Unix系統上,鍵和值會(huì )使用 sys.getfilesystemencoding()'surrogateescape' 的錯誤處理。如果你想使用其他的編碼,使用 environb。

備注

Calling putenv() directly does not change os.environ, so it's better to modify os.environ.

備注

在某些平臺上,包括 FreeBSD 和 macOS,設置 environ 可能導致內存泄漏。 請參閱 putenv() 的系統文檔。

You can delete items in this mapping to unset environment variables. unsetenv() will be called automatically when an item is deleted from os.environ, and when one of the pop() or clear() methods is called.

在 3.9 版更改: 已更新并支持了 PEP 584 的合并 (|) 和更新 (|=) 運算符。

os.environb?

Bytes version of environ: a mapping object where both keys and values are bytes objects representing the process environment. environ and environb are synchronized (modifying environb updates environ, and vice versa).

只有在 supports_bytes_environTrue 的時(shí)候 environb 才是可用的。

3.2 新版功能.

在 3.9 版更改: 已更新并支持了 PEP 584 的合并 (|) 和更新 (|=) 運算符。

os.chdir(path)
os.fchdir(fd)
os.getcwd()

以上函數請參閱 文件和目錄 。

os.fsencode(filename)?

類(lèi)似路徑形式的 filename 編碼為 filesystem encoding and error handler;原樣返回 bytes。

fsdecode() 是此函數的逆向函數。

3.2 新版功能.

在 3.6 版更改: 增加對實(shí)現了 os.PathLike 接口的對象的支持。

os.fsdecode(filename)?

根據 filesystem encoding and error handler 來(lái)解碼 類(lèi)似路徑形式的 filename;原樣返回 str。

fsencode() 是此函數的逆向函數。

3.2 新版功能.

在 3.6 版更改: 增加對實(shí)現了 os.PathLike 接口的對象的支持。

os.fspath(path)?

返回路徑的文件系統表示。

如果傳入的是 strbytes 類(lèi)型的字符串,將原樣返回。否則 __fspath__() 將被調用,如果得到的是一個(gè) strbytes 類(lèi)型的對象,那就返回這個(gè)值。其他所有情況則會(huì )拋出 TypeError  異常。

3.6 新版功能.

class os.PathLike?

某些對象用于表示文件系統中的路徑(如 pathlib.PurePath 對象),本類(lèi)是這些對象的 抽象基類(lèi)。

3.6 新版功能.

abstractmethod __fspath__()?

返回當前對象的文件系統表示。

這個(gè)方法只應該返回一個(gè) str 字符串或 bytes 字節串,請優(yōu)先選擇 str 字符串。

os.getenv(key, default=None)?

Return the value of the environment variable key if it exists, or default if it doesn't. key, default and the result are str. Note that since getenv() uses os.environ, the mapping of getenv() is similarly also captured on import, and the function may not reflect future environment changes.

在Unix系統上,鍵和值會(huì )使用 sys.getfilesystemencoding() 和``'surrogateescape'`` 錯誤處理進(jìn)行解碼。如果你想使用其他的編碼,使用 os.getenvb()。

可用性: 大部分的Unix系統,Windows。

os.getenvb(key, default=None)?

Return the value of the environment variable key if it exists, or default if it doesn't. key, default and the result are bytes. Note that since getenvb() uses os.environb, the mapping of getenvb() is similarly also captured on import, and the function may not reflect future environment changes.

getenvb() 僅在 supports_bytes_environTrue 時(shí)可用。

可用性: 大部分的Unix系統。

3.2 新版功能.

os.get_exec_path(env=None)?

返回將用于搜索可執行文件的目錄列表,與在外殼程序中啟動(dòng)一個(gè)進(jìn)程時(shí)相似。指定的 env 應為用于搜索 PATH 的環(huán)境變量字典。默認情況下,當 envNone 時(shí),將會(huì )使用 environ 。

3.2 新版功能.

os.getegid()?

返回當前進(jìn)程的有效組ID。對應當前進(jìn)程執行文件的 "set id" 位。

可用性: Unix。

os.geteuid()?

返回當前進(jìn)程的有效用戶(hù)ID。

可用性: Unix。

os.getgid()?

返回當前進(jìn)程的實(shí)際組ID。

可用性: Unix。

os.getgrouplist(user, group)?

Return list of group ids that user belongs to. If group is not in the list, it is included; typically, group is specified as the group ID field from the password record for user, because that group ID will otherwise be potentially omitted.

可用性: Unix。

3.3 新版功能.

os.getgroups()?

返回當前進(jìn)程關(guān)聯(lián)的附加組ID列表

可用性: Unix。

備注

在 macOS 中,getgroups() 會(huì )和其他 Unix 平臺有所不同。 如果 Python 解釋器是在 10.5 或更早版本中部署的,則 getgroups() 會(huì )返回與當前用戶(hù)進(jìn)程相關(guān)聯(lián)的有效組 ID 列表;該列表受限于系統預定義的條目數量,通常為 16,并且在適當的權限下還可通過(guò)調用 setgroups() 來(lái)修改。 如果是在高于 10.5 的版本中部署的,則 getgroups() 會(huì )返回與進(jìn)程的有效用戶(hù) ID 相關(guān)聯(lián)的當前組訪(fǎng)問(wèn)列表;組訪(fǎng)問(wèn)列表可能會(huì )在進(jìn)程的生命周期之內發(fā)生改變,它不會(huì )受對 setgroups() 的調用影響,且其長(cháng)度也不被限制為 16。 部署目標值 MACOSX_DEPLOYMENT_TARGET 可以通過(guò) sysconfig.get_config_var() 來(lái)獲取。

os.getlogin()?

返回通過(guò)控制終端進(jìn)程進(jìn)行登錄的用戶(hù)名。在多數情況下,使用 getpass.getuser() 會(huì )更有效,因為后者會(huì )通過(guò)檢查環(huán)境變量 LOGNAMEUSERNAME 來(lái)查找用戶(hù),再由 pwd.getpwuid(os.getuid())[0] 來(lái)獲取當前用戶(hù) ID 的登錄名。

可用性: Unix, Windows。

os.getpgid(pid)?

根據進(jìn)程id pid 返回進(jìn)程的組 ID 列表。如果 pid 為 0,則返回當前進(jìn)程的進(jìn)程組 ID 列表

可用性: Unix。

os.getpgrp()?

返回當時(shí)進(jìn)程組的ID

可用性: Unix。

os.getpid()?

返回當前進(jìn)程ID

os.getppid()?

返回父進(jìn)程ID。當父進(jìn)程已經(jīng)結束,在Unix中返回的ID是初始進(jìn)程(1)中的一個(gè),在Windows中仍然是同一個(gè)進(jìn)程ID,該進(jìn)程ID有可能已經(jīng)被進(jìn)行進(jìn)程所占用。

可用性: Unix, Windows。

在 3.2 版更改: 添加WIndows的支持。

os.getpriority(which, who)?

獲取程序調度優(yōu)先級。which 參數值可以是 PRIO_PROCESS,PRIO_PGRP,或 PRIO_USER 中的一個(gè),who 是相對于 which (PRIO_PROCESS 的進(jìn)程標識符,PRIO_PGRP 的進(jìn)程組標識符和 PRIO_USER 的用戶(hù)ID)。當 who 為 0 時(shí)(分別)表示調用的進(jìn)程,調用進(jìn)程的進(jìn)程組或調用進(jìn)程所屬的真實(shí)用戶(hù) ID。

可用性: Unix。

3.3 新版功能.

os.PRIO_PROCESS?
os.PRIO_PGRP?
os.PRIO_USER?

函數 getpriority()setpriority() 的參數。

可用性: Unix。

3.3 新版功能.

os.getresuid()?

返回一個(gè)由 (ruid, euid, suid) 所組成的元組,分別表示當前進(jìn)程的真實(shí)用戶(hù)ID,有效用戶(hù)ID和暫存用戶(hù)ID。

可用性: Unix。

3.2 新版功能.

os.getresgid()?

返回一個(gè)由 (rgid, egid, sgid) 所組成的元組,分別表示當前進(jìn)程的真實(shí)組ID,有效組ID和暫存組ID。

可用性: Unix。

3.2 新版功能.

os.getuid()?

返回當前進(jìn)程的真實(shí)用戶(hù)ID。

可用性: Unix。

os.initgroups(username, gid)?

調用系統 initgroups(),使用指定用戶(hù)所在的所有值來(lái)初始化組訪(fǎng)問(wèn)列表,包括指定的組ID。

可用性: Unix。

3.2 新版功能.

os.putenv(key, value)?

將名為 key 的環(huán)境變量值設置為 value。該變量名修改會(huì )影響由 os.system(), popen() ,fork()execv() 發(fā)起的子進(jìn)程。

Assignments to items in os.environ are automatically translated into corresponding calls to putenv(); however, calls to putenv() don't update os.environ, so it is actually preferable to assign to items of os.environ. This also applies to getenv() and getenvb(), which respectively use os.environ and os.environb in their implementations.

備注

在某些平臺上,包括 FreeBSD 和 macOS,設置 environ 可能導致內存泄漏。 請參閱 putenv() 的系統文檔。

引發(fā)一個(gè) 審計事件 os.putenv,附帶參數 key, value。

在 3.9 版更改: 該函數現在總是可用。

os.setegid(egid)?

設置當前進(jìn)程的有效組ID。

可用性: Unix。

os.seteuid(euid)?

設置當前進(jìn)程的有效用戶(hù)ID。

可用性: Unix。

os.setgid(gid)?

設置當前進(jìn)程的組ID。

可用性: Unix。

os.setgroups(groups)?

group 參數值設置為與當進(jìn)程相關(guān)聯(lián)的附加組ID列表。group 參數必須為一個(gè)序列,每個(gè)元素應為每個(gè)組的數字ID。該操作通常只適用于超級用戶(hù)。

可用性: Unix。

備注

在 macOS 中,groups 的長(cháng)度不能超過(guò)系統定義的最大有效組 ID 數量,通常為 16。 對于未返回與調用 setgroups() 產(chǎn)生的相同組列表的情況,請參閱 getgroups() 的文檔。

os.setpgrp()?

根據已實(shí)現的版本(如果有)來(lái)調用系統 setpgrp()setpgrp(0, 0) 。相關(guān)說(shuō)明,請參考 Unix 手冊。

可用性: Unix。

os.setpgid(pid, pgrp)?

使用系統調用 setpgid(),將 pid 對應進(jìn)程的組ID設置為 pgrp。相關(guān)說(shuō)明,請參考 Unix 手冊。

可用性: Unix。

os.setpriority(which, who, priority)?

設置程序調度優(yōu)先級。 which 的值為 PRIO_PROCESS, PRIO_PGRPPRIO_USER 之一,而 who 會(huì )相對于 which (PRIO_PROCESS 的進(jìn)程標識符, PRIO_PGRP 的進(jìn)程組標識符和 PRIO_USER 的用戶(hù) ID) 被解析。 who 值為零 (分別) 表示調用進(jìn)程,調用進(jìn)程的進(jìn)程組或調用進(jìn)程的真實(shí)用戶(hù) ID。 priority 是范圍在 -20 至 19 的值。 默認優(yōu)先級為 0;較小的優(yōu)先級數值會(huì )更優(yōu)先被調度。

可用性: Unix。

3.3 新版功能.

os.setregid(rgid, egid)?

設置當前進(jìn)程的真實(shí)和有效組ID。

可用性: Unix。

os.setresgid(rgid, egid, sgid)?

設置當前進(jìn)程的真實(shí),有效和暫存組ID。

可用性: Unix。

3.2 新版功能.

os.setresuid(ruid, euid, suid)?

設置當前進(jìn)程的真實(shí),有效和暫存用戶(hù)ID。

可用性: Unix。

3.2 新版功能.

os.setreuid(ruid, euid)?

設置當前進(jìn)程的真實(shí)和有效用戶(hù)ID。

可用性: Unix。

os.getsid(pid)?

調用系統調用 getsid()。相關(guān)說(shuō)明,請參考 Unix 手冊。

可用性: Unix。

os.setsid()?

使用系統調用 getsid()。相關(guān)說(shuō)明,請參考 Unix 手冊。

可用性: Unix。

os.setuid(uid)?

設置當前進(jìn)程的用戶(hù)ID。

可用性: Unix。

os.strerror(code)?

根據 code 中的錯誤碼返回錯誤消息。 在某些平臺上當給出未知錯誤碼時(shí) strerror() 將返回 NULL 并會(huì )引發(fā) ValueError。

os.supports_bytes_environ?

如果操作系統上原生環(huán)境類(lèi)型是字節型則為 True (例如在 Windows 上為 False)。

3.2 新版功能.

os.umask(mask)?

設定當前數值掩碼并返回之前的掩碼。

os.uname()?

返回當前操作系統的識別信息。返回值是一個(gè)有5個(gè)屬性的對象:

  • sysname - 操作系統名

  • nodename - 機器在網(wǎng)絡(luò )上的名稱(chēng)(需要先設定)

  • release - 操作系統發(fā)行信息

  • version - 操作系統版本信息

  • machine - 硬件標識符

為了向后兼容,該對象也是可迭代的,像是一個(gè)按照 sysname,nodename,release,version,和 machine 順序組成的元組。

有些系統會(huì )將 nodename 截短為 8 個(gè)字符或截短至前綴部分;獲取主機名的一個(gè)更好方式是 socket.gethostname() 或甚至可以用 socket.gethostbyaddr(socket.gethostname())。

可用性: 較新的 Unix 版本。

在 3.3 版更改: 返回結果的類(lèi)型由元組變成一個(gè)類(lèi)似元組的對象,同時(shí)具有命名的屬性。

os.unsetenv(key)?

取消設置(刪除)名為 key 的環(huán)境變量。變量名的改變會(huì )影響由 os.system(),popen(),fork()execv() 觸發(fā)的子進(jìn)程。

Deletion of items in os.environ is automatically translated into a corresponding call to unsetenv(); however, calls to unsetenv() don't update os.environ, so it is actually preferable to delete items of os.environ.

引發(fā)一個(gè) 審計事件 os.unsetenv,附帶參數 key。

在 3.9 版更改: 該函數現在總是可用,并且在 Windows 上也可用。

創(chuàng )建文件對象?

這些函數創(chuàng )建新的 file objects 。(參見(jiàn) open() 以獲取打開(kāi)文件描述符的相關(guān)信息。)

os.fdopen(fd, *args, **kwargs)?

返回打開(kāi)文件描述符 fd 對應文件的對象。類(lèi)似內建 open() 函數,二者接受同樣的參數。不同之處在于 fdopen() 第一個(gè)參數應該為整數。

文件描述符操作?

這些函數對文件描述符所引用的 I/O 流進(jìn)行操作。

文件描述符是一些小的整數,對應于當前進(jìn)程所打開(kāi)的文件。例如,標準輸入的文件描述符通常是0,標準輸出是1,標準錯誤是2。之后被進(jìn)程打開(kāi)的文件的文件描述符會(huì )被依次指定為3,4,5等?!拔募枋龇边@個(gè)詞有點(diǎn)誤導性,在 Unix 平臺中套接字和管道也被文件描述符所引用。

當需要時(shí),可以用 fileno() 可以獲得 file object 所對應的文件描述符。需要注意的是,直接使用文件描述符會(huì )繞過(guò)文件對象的方法,會(huì )忽略如數據內部緩沖等情況。

os.close(fd)?

關(guān)閉文件描述符 fd。

備注

該功能適用于低級 I/O 操作,必須用于 os.open()pipe() 返回的文件描述符。若要關(guān)閉由內建函數 open()、popen()fdopen() 返回的 "文件對象",則應使用其相應的 close() 方法。

os.closerange(fd_low, fd_high)?

關(guān)閉從 fd_low (包括)到 fd_high (排除)間的文件描述符,并忽略錯誤。類(lèi)似(但快于):

for fd in range(fd_low, fd_high):
    try:
        os.close(fd)
    except OSError:
        pass
os.copy_file_range(src, dst, count, offset_src=None, offset_dst=None)?

從文件描述符 src 復制 count 字節,從偏移量 offset_src 開(kāi)始讀取,到文件描述符 dst,從偏移量 offset_dst 開(kāi)始寫(xiě)入。如果 offset_src 為 None,則 src 將從當前位置開(kāi)始讀??;offset_dst 同理。srcdst 指向的文件必須處于相同的文件系統,否則將會(huì )拋出一個(gè) errno 被設為 errno.EXDEVOSError 。

此復制的完成沒(méi)有額外的從內核到用戶(hù)空間再回到內核的數據轉移花費。另外,一些文件系統可能實(shí)現額外的優(yōu)化。完成復制就如同打開(kāi)兩個(gè)二進(jìn)制文件一樣。

返回值是復制的字節的數目。這可能低于需求的數目。

Availability: Linux kernel >= 4.5 或 glibc >= 2.27。

3.8 新版功能.

os.device_encoding(fd)?

如果連接到終端,則返回一個(gè)與 fd 關(guān)聯(lián)的設備描述字符,否則返回 None。

在 Unix 上,如果啟用了 Python UTF-8 模式,則返回 'UTF-8' 而不是設備的編碼格式。

在 3.10 版更改: 在 Unix 上,該函數現在實(shí)現了 Python UTF-8 模式。

os.dup(fd)?

返回一個(gè)文件描述符 fd 的副本。該文件描述符的副本是 不可繼承的。

在 Windows 中,當復制一個(gè)標準流(0: stdin, 1: stdout, 2: stderr)時(shí),新的文件描述符是 可繼承的。

在 3.4 版更改: 新的文件描述符現在是不可繼承的。

os.dup2(fd, fd2, inheritable=True)?

把文件描述符 fd 復制為 fd2,必要時(shí)先關(guān)閉后者。返回 fd2。新的文件描述符默認是 可繼承的,除非在 inheritableFalse 時(shí),是不可繼承的。

在 3.4 版更改: 添加可選參數 inheritable。

在 3.7 版更改: 成功時(shí)返回 fd2,以過(guò)去的版本中,總是返回 None。

os.fchmod(fd, mode)?

fd 指定文件的權限狀態(tài)修改為 mode??梢詤⒖?chmod() 中列出 mode 的可用值。從Python 3.3開(kāi)始,這相當于 os.chmod(fd, mode)。

引發(fā)一個(gè) 審計事件 os.chmod,附帶參數 path、mode、dir_fd。

可用性: Unix。

os.fchown(fd, uid, gid)?

分別將 fd 指定文件的所有者和組 ID 修改為 uidgid 的值。若不想變更其中的某個(gè) ID,可將相應值設為 -1。參考 chown()。從 Python 3.3 開(kāi)始,這相當于 os.chown(fd, uid, gid)。

引發(fā)一個(gè) 審計事件 os.chown,附帶參數 path、uid、gid、dir_fd。

可用性: Unix。

os.fdatasync(fd)?

強制將文件描述符 fd 指定文件寫(xiě)入磁盤(pán)。不強制更新元數據。

可用性: Unix。

備注

該功能在 MacOS 中不可用。

os.fpathconf(fd, name)?

返回與打開(kāi)的文件有關(guān)的系統配置信息。name 指定要查找的配置名稱(chēng),它可以是字符串,是一個(gè)系統已定義的名稱(chēng),這些名稱(chēng)定義在不同標準(POSIX.1,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱(chēng)。當前操作系統已定義的名稱(chēng)在 pathconf_names 字典中給出。對于未包含在該映射中的配置名稱(chēng),也可以傳遞一個(gè)整數作為 name。

如果 name 是一個(gè)字符串且不是已定義的名稱(chēng),將拋出 ValueError 異常。如果當前系統不支持 name 指定的配置名稱(chēng),即使該名稱(chēng)存在于 pathconf_names,也會(huì )拋出 OSError 異常,錯誤碼為 errno.EINVAL。

從 Python 3.3 起,此功能等價(jià)于 os.pathconf(fd, name)。

可用性: Unix。

os.fstat(fd)?

獲取文件描述符 fd 的狀態(tài). 返回一個(gè) stat_result 對象。

從 Python 3.3 起,此功能等價(jià)于 os.stat(fd)。

參見(jiàn)

stat() 函數。

os.fstatvfs(fd)?

返回文件系統的信息,該文件系統是文件描述符 fd 指向的文件所在的文件系統,與 statvfs() 一樣。從 Python 3.3 開(kāi)始,它等效于 os.statvfs(fd)。

可用性: Unix。

os.fsync(fd)?

強制將文件描述符 fd 指向的文件寫(xiě)入磁盤(pán)。在 Unix,這將調用原生 fsync() 函數;在 Windows,則是 MS _commit() 函數。

如果要寫(xiě)入的是緩沖區內的 Python 文件對象 f,請先執行 f.flush(),然后執行 os.fsync(f.fileno()),以確保與 f 關(guān)聯(lián)的所有內部緩沖區都寫(xiě)入磁盤(pán)。

可用性: Unix, Windows。

os.ftruncate(fd, length)?

截斷文件描述符 fd 指向的文件,以使其最大為 length 字節。從 Python 3.3 開(kāi)始,它等效于 os.truncate(fd, length)。

引發(fā)一個(gè) 審計事件 os.truncate,附帶參數 fd, length。

可用性: Unix, Windows。

在 3.5 版更改: 添加了 Windows 支持

os.get_blocking(fd)?

獲取文件描述符的阻塞模式:如果設置了 O_NONBLOCK 標志位,返回 False,如果該標志位被清除,返回 True。

參見(jiàn) set_blocking()socket.socket.setblocking()。

可用性: Unix。

3.5 新版功能.

os.isatty(fd)?

如果文件描述符 fd 打開(kāi)且已連接至 tty 設備(或類(lèi) tty 設備),返回 True,否則返回 False。

os.lockf(fd, cmd, len)?

在打開(kāi)的文件描述符上,使用、測試或刪除 POSIX 鎖。fd 是一個(gè)打開(kāi)的文件描述符。cmd 指定要進(jìn)行的操作,它們是 F_LOCK、F_TLOCK、F_ULOCKF_TEST 中的一個(gè)。len 指定哪部分文件需要鎖定。

引發(fā)一個(gè) 審計事件 os.lockf,附帶參數 fd、cmd、len。

可用性: Unix。

3.3 新版功能.

os.F_LOCK?
os.F_TLOCK?
os.F_ULOCK?
os.F_TEST?

標志位,用于指定 lockf() 進(jìn)行哪一種操作。

可用性: Unix。

3.3 新版功能.

os.login_tty(fd)?

Prepare the tty of which fd is a file descriptor for a new login session. Make the calling process a session leader; make the tty the controlling tty, the stdin, the stdout, and the stderr of the calling process; close fd.

可用性: Unix。

3.11 新版功能.

os.lseek(fd, pos, how)?

將文件描述符 fd 的當前位置設置為 pos,位置的計算方式 how 如下:設置為 SEEK_SET0 表示從文件開(kāi)頭計算,設置為 SEEK_CUR1 表示從文件當前位置計算,設置為 SEEK_END2 表示文件末尾計算。返回新指針位置,這個(gè)位置是從文件開(kāi)頭計算的,單位是字節。

os.SEEK_SET?
os.SEEK_CUR?
os.SEEK_END?

lseek() 函數的參數,它們的值分別為 0、1 和 2。

3.3 新版功能: 某些操作系統可能支持其他值,例如 os.SEEK_HOLEos.SEEK_DATA。

os.open(path, flags, mode=0o777, *, dir_fd=None)?

打開(kāi)文件 path,根據 flags 設置各種標志位,并根據 mode 設置其權限狀態(tài)。當計算 mode 時(shí),會(huì )首先根據當前 umask 值將部分權限去除。本方法返回新文件的描述符。新的文件描述符是 不可繼承 的。

有關(guān) flag 和 mode 取值的說(shuō)明,請參見(jiàn) C 運行時(shí)文檔。標志位常量(如 O_RDONLYO_WRONLY)在 os 模塊中定義。特別地,在 Windows 上需要添加 O_BINARY 才能以二進(jìn)制模式打開(kāi)文件。

本函數帶有 dir_fd 參數,支持 基于目錄描述符的相對路徑。

open 附帶參數 path、mode、flags 會(huì )引發(fā) 審計事件。

在 3.4 版更改: 新的文件描述符現在是不可繼承的。

備注

本函數適用于底層的 I/O。常規用途請使用內置函數 open(),該函數的 read()write() 方法(及其他方法)會(huì )返回 文件對象。要將文件描述符包裝在文件對象中,請使用 fdopen()。

3.3 新版功能: dir_fd 參數。

在 3.5 版更改: 如果系統調用被中斷,但信號處理程序沒(méi)有觸發(fā)異常,此函數現在會(huì )重試系統調用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。

在 3.6 版更改: 接受一個(gè) path-like object。

以下常量是 open() 函數 flags 參數的選項??梢杂冒次换蜻\算符 | 將它們組合使用。部分常量并非在所有平臺上都可用。有關(guān)其可用性和用法的說(shuō)明,請參閱 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?

這個(gè)常數僅在 Unix 系統中可用。

在 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?

這個(gè)常數僅在 Windows 系統中可用。

os.O_EVTONLY?
os.O_FSYNC?
os.O_NOFOLLOW_ANY?

以上常量?jì)H適用于 macOS。

在 3.10 版更改: 加入 O_EVTONLY 、 O_FSYNC 、 O_SYMLINKO_NOFOLLOW_ANY 常量。

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 庫未定義它們,則不存在。

在 3.4 版更改: 在支持的系統上增加 O_PATH。增加 O_TMPFILE,僅在 Linux Kernel 3.11 或更高版本可用。

os.openpty()?

打開(kāi)一對新的偽終端,返回一對文件描述符 (主,從),分別為 pty 和 tty。新的文件描述符是 不可繼承 的。對于(稍微)輕量一些的方法,請使用 pty 模塊。

可用性: 某些 Unix。

在 3.4 版更改: 新的文件描述符不再可繼承。

os.pipe()?

創(chuàng )建一個(gè)管道,返回一對分別用于讀取和寫(xiě)入的文件描述符 (r, w)。新的文件描述符是 不可繼承 的。

可用性: Unix, Windows。

在 3.4 版更改: 新的文件描述符不再可繼承。

os.pipe2(flags)?

創(chuàng )建帶有 flags 標志位的管道??赏ㄟ^(guò)對以下一個(gè)或多個(gè)值進(jìn)行“或”運算來(lái)構造這些 flagsO_NONBLOCK、O_CLOEXEC。返回一對分別用于讀取和寫(xiě)入的文件描述符 (r, w)。

可用性: 某些 Unix。

3.3 新版功能.

os.posix_fallocate(fd, offset, len)?

確保為 fd 指向的文件分配了足夠的磁盤(pán)空間,該空間從偏移量 offset 開(kāi)始,到 len 字節為止。

可用性: Unix。

3.3 新版功能.

os.posix_fadvise(fd, offset, len, advice)?

聲明即將以特定模式訪(fǎng)問(wèn)數據,使內核可以提前進(jìn)行優(yōu)化。數據范圍是從 fd 所指向文件的 offset 開(kāi)始,持續 len 個(gè)字節。advice 的取值是如下之一:POSIX_FADV_NORMAL, POSIX_FADV_SEQUENTIAL, POSIX_FADV_RANDOM, POSIX_FADV_NOREUSE, POSIX_FADV_WILLNEEDPOSIX_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 參數的標志位,指定可能使用的訪(fǎng)問(wèn)模式。

可用性: Unix。

3.3 新版功能.

os.pread(fd, n, offset)?

從文件描述符 fd 所指向文件的偏移位置 offset 開(kāi)始,讀取至多 n 個(gè)字節,而保持文件偏移量不變。

返回所讀取字節的字節串 (bytestring)。如果到達了 fd 指向的文件末尾,則返回空字節對象。

可用性: Unix。

3.3 新版功能.

os.preadv(fd, buffers, offset, flags=0)?

從文件描述符 fd 所指向文件的偏移位置 offset 開(kāi)始,將數據讀取至可變 字節類(lèi)對象 緩沖區 buffers 中,保持文件偏移量不變。將數據依次存放到每個(gè)緩沖區中,填滿(mǎn)一個(gè)后繼續存放到序列中的下一個(gè)緩沖區,來(lái)保存其余數據。

flags 參數可以由零個(gè)或多個(gè)標志位進(jìn)行按位或運算來(lái)得到:

返回實(shí)際讀取的字節總數,該總數可以小于所有對象的總容量。

操作系統可能對允許使用的緩沖區數量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。

本方法結合了 os.readv()os.pread() 的功能。

可用性:Linux 2.6.30 或更高版本,FreeBSD 6.0 或更高版本,OpenBSD 2.7 或更高版本,AIX 7.1 或更高版本。使用標志位需要 Linux 4.6 或更高版本。

3.7 新版功能.

os.RWF_NOWAIT?

不要等待無(wú)法立即獲得的數據。如果指定了此標志,那么當需要從后備存儲器中讀取數據,或等待文件鎖時(shí),系統調用將立即返回。

如果成功讀取數據,則返回讀取的字節數。如果未讀取到數據,則返回 -1,并將錯誤碼 errno 置為 errno.EAGAIN。

可用性:Linux 4.14 或更高版本。

3.7 新版功能.

os.RWF_HIPRI?

高優(yōu)先級讀/寫(xiě)。允許基于塊的文件系統對設備進(jìn)行輪詢(xún),這樣可以降低延遲,但可能會(huì )占用更多資源。

目前在 Linux 上,此功能僅在使用 O_DIRECT 標志打開(kāi)的文件描述符上可用。

可用性:Linux 4.6 或更高版本。

3.7 新版功能.

os.pwrite(fd, str, offset)?

str 中的字節串 (bytestring) 寫(xiě)入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。

返回實(shí)際寫(xiě)入的字節數。

可用性: Unix。

3.3 新版功能.

os.pwritev(fd, buffers, offset, flags=0)?

將緩沖區 buffers 的內容寫(xiě)入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。緩沖區 buffers 必須是由 字節類(lèi)對象 組成的序列。緩沖區以數組順序處理。先寫(xiě)入第一個(gè)緩沖區的全部?jì)热?,再?xiě)入第二個(gè)緩沖區,照此繼續。

flags 參數可以由零個(gè)或多個(gè)標志位進(jìn)行按位或運算來(lái)得到:

返回實(shí)際寫(xiě)入的字節總數。

操作系統可能對允許使用的緩沖區數量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。

本方法結合了 os.writev()os.pwrite() 的功能。

可用性:Linux 2.6.30 或更高版本,FreeBSD 6.0 或更高版本,OpenBSD 2.7 或更高版本,AIX 7.1 或更高版本。使用標志位需要 Linux 4.7 或更高版本。

3.7 新版功能.

os.RWF_DSYNC?

提供預寫(xiě)功能,等效于帶 O_DSYNC 標志的 os.open() 。本標志只作用于通過(guò)系統調用寫(xiě)入的數據。

可用性:Linux 4.7 或更高版本。

3.7 新版功能.

os.RWF_SYNC?

提供預寫(xiě)功能,等效于帶 O_SYNC 標志的 os.open() 。本標志只作用于通過(guò)系統調用寫(xiě)入的數據。

可用性:Linux 4.7 或更高版本。

3.7 新版功能.

os.RWF_APPEND?

提供預寫(xiě)功能,等效于帶 O_APPEND 標志的 os.open() 。本標志只對 os.pwritev() 有意義,只作用于通過(guò)系統調用寫(xiě)入的數據。參數 offset 對寫(xiě)入操作無(wú)效;數據總是會(huì )添加到文件的末尾。但如果 offset 參數為 -1,則會(huì )刷新當前文件的 offset 。

可用性:Linux 4.16 以上版本。

3.10 新版功能.

os.read(fd, n)?

從文件描述符 fd 中讀取至多 n 個(gè)字節。

返回所讀取字節的字節串 (bytestring)。如果到達了 fd 指向的文件末尾,則返回空字節對象。

備注

該功能適用于低級 I/O 操作,必須用于 os.open()pipe() 返回的文件描述符。若要讀取由內建函數 open()、popen()、fdopen()sys.stdin 返回的 "文件對象",則應使用其相應的 read()readline() 方法。

在 3.5 版更改: 如果系統調用被中斷,但信號處理程序沒(méi)有觸發(fā)異常,此函數現在會(huì )重試系統調用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。

os.sendfile(out_fd, in_fd, offset, count)?
os.sendfile(out_fd, in_fd, offset, count, headers=(), trailers=(), flags=0)

將文件描述符 in_fd 中的 count 字節復制到文件描述符 out_fd 的偏移位置 offset 處。返回復制的字節數,如果到達 EOF,返回 0。

定義了 sendfile() 的所有平臺均支持第一種函數用法。

在 Linux 上,將 offset 設置為 None,則從 in_fd 的當前位置開(kāi)始讀取,并更新 in_fd 的位置。

第二種情況可以被用于 macOS 和 FreeBSD,其中 headerstrailers 是任意的緩沖區序列,它們會(huì )在寫(xiě)入來(lái)自 in_fd 的數據之前被寫(xiě)入。 它的返回內容與第一種情況相同。

在 macOS 和 FreeBSD 上,傳入 0 值作為 count 將指定持續發(fā)送直至到達 in_fd 的末尾。

所有平臺都支持將套接字作為 out_fd 文件描述符,有些平臺也支持其他類(lèi)型(如常規文件或管道)。

跨平臺應用程序不應使用 headers、trailersflags 參數。

可用性: Unix。

備注

有關(guān) sendfile() 的高級封裝,參見(jiàn) socket.socket.sendfile()。

3.3 新版功能.

在 3.9 版更改: outin 參數被重命名為 out_fdin_fd。

os.set_blocking(fd, blocking)?

設置指定文件描述符的阻塞模式:如果 blocking 為 False,則為該描述符設置 O_NONBLOCK 標志位,反之則清除該標志位。

參見(jiàn) get_blocking()socket.socket.setblocking()。

可用性: Unix。

3.5 新版功能.

os.SF_NODISKIO?
os.SF_MNOWAIT?
os.SF_SYNC?

sendfile() 函數的參數(假設當前實(shí)現支持這些參數)。

可用性: Unix。

3.3 新版功能.

os.SF_NOCACHE?

Parameter to the sendfile() function, if the implementation supports it. The data won't be cached in the virtual memory and will be freed afterwards.

可用性: Unix。

3.11 新版功能.

os.splice(src, dst, count, offset_src=None, offset_dst=None)?

由文件描述符 src 傳輸 count 字節,從偏移量 offset_src 開(kāi)始讀取,到文件描述符 dst,從偏移量 offset_dst 開(kāi)始寫(xiě)入。至少得有一個(gè)文件描述符必須指向管道。如果 offset_src 為 None,則 src 將從當前位置開(kāi)始讀??;offset_dst 同理。指向管道的文件描述符,其偏移量必須為 None。 srcdst 指向的文件必須處于同一文件系統中,否則將會(huì )觸發(fā) OSError ,其 errno 將被設為 errno.EXDEV 。

此復制的完成沒(méi)有額外的從內核到用戶(hù)空間再回到內核的數據轉移花費。另外,一些文件系統可能實(shí)現額外的優(yōu)化。完成復制就如同打開(kāi)兩個(gè)二進(jìn)制文件一樣。

調用成功后,返回拼接到管道的字節數或從管道拼接出來(lái)的字節數。返回值為 0 意味著(zhù)輸入結束。如果 src 指向一個(gè)管道,則意味著(zhù)沒(méi)有數據需要傳輸,而且由于沒(méi)有寫(xiě)入程序連到管道的寫(xiě)入端,所以將不會(huì )阻塞。

可用性: Linux >= 2.6.27 且 glibc >= 2.5。

3.10 新版功能.

os.SPLICE_F_MOVE?
os.SPLICE_F_NONBLOCK?
os.SPLICE_F_MORE?

3.10 新版功能.

os.readv(fd, buffers)?

從文件描述符 fd 將數據讀取至多個(gè)可變的 字節類(lèi)對象 緩沖區 buffers 中。將數據依次存放到每個(gè)緩沖區中,填滿(mǎn)一個(gè)后繼續存放到序列中的下一個(gè)緩沖區,來(lái)保存其余數據。

返回實(shí)際讀取的字節總數,該總數可以小于所有對象的總容量。

操作系統可能對允許使用的緩沖區數量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。

可用性: Unix。

3.3 新版功能.

os.tcgetpgrp(fd)?

返回與 fd 指定的終端相關(guān)聯(lián)的進(jìn)程組(fd 是由 os.open() 返回的已打開(kāi)的文件描述符)。

可用性: Unix。

os.tcsetpgrp(fd, pg)?

設置與 fd 指定的終端相關(guān)聯(lián)的進(jìn)程組為 pg*(*fd 是由 os.open() 返回的已打開(kāi)的文件描述符)。

可用性: Unix。

os.ttyname(fd)?

返回一個(gè)字符串,該字符串表示與文件描述符 fd 關(guān)聯(lián)的終端。如果 fd 沒(méi)有與終端關(guān)聯(lián),則拋出異常。

可用性: Unix。

os.write(fd, str)?

str 中的字節串 (bytestring) 寫(xiě)入文件描述符 fd。

返回實(shí)際寫(xiě)入的字節數。

備注

該功能適用于低級 I/O 操作,必須用于 os.open()pipe() 返回的文件描述符。若要寫(xiě)入由內建函數 open()、popen()、fdopen()、sys.stdoutsys.stderr 返回的 "文件對象",則應使用其相應的 write() 方法。

在 3.5 版更改: 如果系統調用被中斷,但信號處理程序沒(méi)有觸發(fā)異常,此函數現在會(huì )重試系統調用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。

os.writev(fd, buffers)?

將緩沖區 buffers 的內容寫(xiě)入文件描述符 fd。緩沖區 buffers 必須是由 字節類(lèi)對象 組成的序列。緩沖區以數組順序處理。先寫(xiě)入第一個(gè)緩沖區的全部?jì)热?,再?xiě)入第二個(gè)緩沖區,照此繼續。

返回實(shí)際寫(xiě)入的字節總數。

操作系統可能對允許使用的緩沖區數量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。

可用性: Unix。

3.3 新版功能.

查詢(xún)終端的尺寸?

3.3 新版功能.

os.get_terminal_size(fd=STDOUT_FILENO)?

返回終端窗口的尺寸,格式為 (columns, lines),它是類(lèi)型為 terminal_size 的元組。

可選參數 fd (默認為 STDOUT_FILENO 或標準輸出)指定應查詢(xún)的文件描述符。

如果文件描述符未連接到終端,則拋出 OSError 異常。

shutil.get_terminal_size() 是供常規使用的高階函數,os.get_terminal_size 是其底層的實(shí)現。

可用性: Unix, Windows。

class os.terminal_size?

元組的子類(lèi),存儲終端窗口尺寸 (columns, lines)。

columns?

終端窗口的寬度,單位為字符。

lines?

終端窗口的高度,單位為字符。

文件描述符的繼承?

3.4 新版功能.

每個(gè)文件描述符都有一個(gè) "inheritable"(可繼承)標志位,該標志位控制了文件描述符是否可以由子進(jìn)程繼承。從 Python 3.4 開(kāi)始,由 Python 創(chuàng )建的文件描述符默認是不可繼承的。

在 UNIX 上,執行新程序時(shí),不可繼承的文件描述符在子進(jìn)程中是關(guān)閉的,其他文件描述符將被繼承。

在 Windows 上,不可繼承的句柄和文件描述符在子進(jìn)程中是關(guān)閉的,但標準流(文件描述符 0、1 和 2 即標準輸入、標準輸出和標準錯誤)是始終繼承的。如果使用 spawn* 函數,所有可繼承的句柄和文件描述符都將被繼承。如果使用 subprocess 模塊,將關(guān)閉除標準流以外的所有文件描述符,并且僅當 close_fds 參數為 False 時(shí)才繼承可繼承的句柄。

os.get_inheritable(fd)?

獲取指定文件描述符的“可繼承”標志位(為布爾值)。

os.set_inheritable(fd, inheritable)?

設置指定文件描述符的“可繼承”標志位。

os.get_handle_inheritable(handle)?

獲取指定句柄的“可繼承”標志位(為布爾值)。

可用性: Windows。

os.set_handle_inheritable(handle, inheritable)?

設置指定句柄的“可繼承”標志位。

可用性: Windows。

文件和目錄?

在某些 Unix 平臺上,許多函數支持以下一項或多項功能:

  • 指定文件描述符為參數: 通常在 os 模塊中提供給函數的 path 參數必須是表示文件路徑的字符串,但是,某些函數現在可以接受其 path 參數為打開(kāi)文件描述符,該函數將對描述符指向的文件進(jìn)行操作。(對于 POSIX 系統,Python 將調用以 f 開(kāi)頭的函數變體(如調用 fchdir 而不是 chdir)。)

    可以用 os.supports_fd 檢查某個(gè)函數在你的平臺上是否支持將 path 參數指定為文件描述符。如果不支持,使用該功能將拋出 NotImplementedError 異常。

    如果該函數還支持 dir_fdfollow_symlinks 參數,那么用文件描述符作為 path 后就不能再指定上述參數了。

  • 基于目錄描述符的相對路徑: 如果 dir_fd 不是 None,它就應該是一個(gè)指向目錄的文件描述符,這時(shí)待操作的 path 應該是相對路徑,相對路徑是相對于前述目錄的。如果 path 是絕對路徑,則 dir_fd 將被忽略。(對于 POSIX 系統,Python 將調用該函數的變體,變體以 at 結尾,可能以 f 開(kāi)頭(如調用 faccessat 而不是 access)。

    可以用 os.supports_dir_fd 檢查某個(gè)函數在你的平臺上是否支持 dir_fd。如果不支持,使用該功能將拋出 NotImplementedError 異常。

os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)?

使用 實(shí)際用戶(hù)ID/用戶(hù)組ID 測試對 path 的訪(fǎng)問(wèn)。請注意,大多數測試操作將使用 有效用戶(hù)ID/用戶(hù)組ID,因此可以在 suid/sgid 環(huán)境中運用此例程,來(lái)測試調用用戶(hù)是否具有對 path 的指定訪(fǎng)問(wèn)權限。modeF_OK 時(shí)用于測試 path 是否存在,也可以對 R_OK、W_OKX_OK 中的一個(gè)或多個(gè)進(jìn)行“或”運算來(lái)測試指定權限。允許訪(fǎng)問(wèn)則返回 True,否則返回 False。更多信息請參見(jiàn) Unix 手冊頁(yè) access(2)。

本函數支持指定 基于目錄描述符的相對路徑不跟蹤符號鏈接。

如果 effective_idsTrue,access() 將使用 有效用戶(hù)ID/用戶(hù)組ID 而非 實(shí)際用戶(hù)ID/用戶(hù)組ID 進(jìn)行訪(fǎng)問(wèn)檢查。您的平臺可能不支持 effective_ids,您可以使用 os.supports_effective_ids 檢查它是否可用。如果不可用,使用它時(shí)會(huì )拋出 NotImplementedError 異常。

備注

使用 access() 來(lái)檢查用戶(hù)是否具有某項權限(如打開(kāi)文件的權限),然后再使用 open() 打開(kāi)文件,這樣做存在一個(gè)安全漏洞,因為用戶(hù)可能會(huì )在檢查和打開(kāi)文件之間的時(shí)間里做其他操作。推薦使用 EAFP 技術(shù)。如:

if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
        return fp.read()
return "some default data"

最好寫(xiě)成:

try:
    fp = open("myfile")
except PermissionError:
    return "some default data"
else:
    with fp:
        return fp.read()

備注

即使 access() 指示 I/O 操作會(huì )成功,但實(shí)際操作仍可能失敗,尤其是對網(wǎng)絡(luò )文件系統的操作,其權限語(yǔ)義可能超出常規的 POSIX 權限位模型。

在 3.3 版更改: 添加 dir_fd、effective_idsfollow_symlinks 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.F_OK?
os.R_OK?
os.W_OK?
os.X_OK?

作為 access()mode 參數的可選值,分別測試 path 的存在性、可讀性、可寫(xiě)性和可執行性。

os.chdir(path)?

將當前工作目錄更改為 path。

本函數支持 指定文件描述符為參數。其中,描述符必須指向打開(kāi)的目錄,不能是打開(kāi)的文件。

本函數可以?huà)伋?OSError 及其子類(lèi)的異常,如 FileNotFoundError、PermissionErrorNotADirectoryError 異常。

引發(fā)一個(gè) 審計事件 os.chdir,附帶參數 path。

3.3 新版功能: 在某些平臺上新增支持將 path 參數指定為文件描述符。

在 3.6 版更改: 接受一個(gè) path-like object。

os.chflags(path, flags, *, follow_symlinks=True)?

path 的 flags 設置為其他由數字表示的 flags。flags 可以用以下值按位或組合起來(lái)(以下值在 stat 模塊中定義):

本函數支持 不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.chflags,附帶參數 path、flags。

可用性: Unix。

3.3 新版功能: follow_symlinks 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)?

path 的 mode 更改為其他由數字表示的 mode。mode 可以用以下值之一,也可以將它們按位或組合起來(lái)(以下值在 stat 模塊中定義):

本函數支持 指定文件描述符、指定基于目錄描述符的相對路徑不跟蹤符號鏈接。

備注

盡管 Windows 支持 chmod(),但只能用它設置文件的只讀標志(stat.S_IWRITEstat.S_IREAD 常量或對應的整數值)。所有其他標志位都會(huì )被忽略。

引發(fā)一個(gè) 審計事件 os.chmod,附帶參數 path、mode、dir_fd。

3.3 新版功能: 添加了指定 path 為文件描述符的支持,以及 dir_fdfollow_symlinks 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)?

path 的用戶(hù)和組 ID 分別修改為數字形式的 uidgid。若要使其中某個(gè) ID 保持不變,請將其置為 -1。

本函數支持 指定文件描述符、指定基于目錄描述符的相對路徑不跟蹤符號鏈接。

參見(jiàn)更高階的函數 shutil.chown(),除了數字 ID 之外,它也接受名稱(chēng)。

引發(fā)一個(gè) 審計事件 os.chown,附帶參數 path、uid、gid、dir_fd。

可用性: Unix。

3.3 新版功能: 添加了指定 path 為文件描述符的支持,以及 dir_fdfollow_symlinks 參數。

在 3.6 版更改: 支持 類(lèi)路徑對象。

os.chroot(path)?

將當前進(jìn)程的根目錄更改為 path。

可用性: Unix。

在 3.6 版更改: 接受一個(gè) path-like object。

os.fchdir(fd)?

將當前工作目錄更改為文件描述符 fd 指向的目錄。fd 必須指向打開(kāi)的目錄而非文件。從 Python 3.3 開(kāi)始,它等效于 os.chdir(fd)。

引發(fā)一個(gè) 審計事件 os.chdir,附帶參數 path。

可用性: Unix。

os.getcwd()?

返回表示當前工作目錄的字符串。

os.getcwdb()?

返回表示當前工作目錄的字節串 (bytestring)。

在 3.8 版更改: 在 Windows 上,本函數現在會(huì )使用 UTF-8 編碼格式而不是 ANSI 代碼頁(yè):請參看 PEP 529 了解具體原因。 該函數在 Windows 上不再被棄用。

os.lchflags(path, flags)?

path 的 flags 設置為其他由數字表示的 flags,與 chflags() 類(lèi)似,但不跟蹤符號鏈接。從 Python 3.3 開(kāi)始,它等效于 os.chflags(path, flags, follow_symlinks=False)。

引發(fā)一個(gè) 審計事件 os.chflags,附帶參數 path、flags。

可用性: Unix。

在 3.6 版更改: 接受一個(gè) path-like object。

os.lchmod(path, mode)?

path 的權限狀態(tài)修改為 mode。如果 path 是符號鏈接,則影響符號鏈接本身而非鏈接目標??梢詤⒖?chmod() 中列出 mode 的可用值。從 Python 3.3 開(kāi)始,它等效于 os.chmod(path, mode, follow_symlinks=False)。

引發(fā)一個(gè) 審計事件 os.chmod,附帶參數 path、mode、dir_fd。

可用性: Unix。

在 3.6 版更改: 接受一個(gè) path-like object。

os.lchown(path, uid, gid)?

path 的用戶(hù)和組 ID 分別修改為數字形式的 uidgid,本函數不跟蹤符號鏈接。從 Python 3.3 開(kāi)始,它等效于 os.chown(path, uid, gid, follow_symlinks=False)。

引發(fā)一個(gè) 審計事件 os.chown,附帶參數 path、uid、gid、dir_fd。

可用性: Unix。

在 3.6 版更改: 接受一個(gè) path-like object。

創(chuàng )建一個(gè)指向 src 的硬鏈接,名為 dst。

本函數支持將 src_dir_fddst_dir_fd 中的一個(gè)或兩個(gè)指定為 基于目錄描述符的相對路徑,支持 不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.link 附帶參數 src、dst、src_dir_fd、dst_dir_fd。

可用性: Unix, Windows。

在 3.2 版更改: 添加了對 Windows 的支持。

3.3 新版功能: 添加 src_dir_fd、dst_dir_fdfollow_symlinks 參數。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 srcdst。

os.listdir(path='.')?

返回一個(gè)包含由 path 指定目錄中條目名稱(chēng)組成的列表。 該列表按任意順序排列,并且不包括特殊條目 '.''..',即使它們存在于目錄中。 如果有文件在調用此函數期間在被移除或添加到目錄中,是否要包括該文件的名稱(chēng)并沒(méi)有規定。

path 可以是 類(lèi)路徑對象。如果 path 是(直接傳入或通過(guò) PathLike 接口間接傳入) bytes 類(lèi)型,則返回的文件名也將是 bytes 類(lèi)型,其他情況下是 str 類(lèi)型。

本函數也支持 指定文件描述符為參數,其中描述符必須指向目錄。

引發(fā)一個(gè) 審計事件 os.listdir,附帶參數 path。

備注

要將 str 類(lèi)型的文件名編碼為 bytes,請使用 fsencode()。

參見(jiàn)

scandir() 函數返回目錄內文件名的同時(shí),也返回文件屬性信息,它在某些具體情況下能提供更好的性能。

在 3.2 版更改: path 變?yōu)榭蛇x參數。

3.3 新版功能: 新增支持將 path 參數指定為打開(kāi)的文件描述符。

在 3.6 版更改: 接受一個(gè) path-like object。

os.lstat(path, *, dir_fd=None)?

在給定路徑上執行本函數,其操作相當于 lstat() 系統調用,類(lèi)似于 stat() 但不跟蹤符號鏈接。返回值是 stat_result 對象。

在不支持符號鏈接的平臺上,本函數是 stat() 的別名。

從 Python 3.3 起,此功能等價(jià)于 os.stat(path, dir_fd=dir_fd, follow_symlinks=False)。

本函數支持 基于目錄描述符的相對路徑。

參見(jiàn)

stat() 函數。

在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。

在 3.3 版更改: 添加了 dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

在 3.8 版更改: 目前在 Windows 上,遇到表示另一個(gè)路徑的重解析點(diǎn)(即名稱(chēng)代理,包括符號鏈接和目錄結點(diǎn)),本函數將打開(kāi)它。其他種類(lèi)的重解析點(diǎn)由 stat() 交由操作系統解析。

os.mkdir(path, mode=0o777, *, dir_fd=None)?

創(chuàng )建一個(gè)名為 path 的目錄,應用以數字表示的權限模式 mode。

If the directory already exists, FileExistsError is raised. If a parent directory in the path does not exist, FileNotFoundError is raised.

某些系統會(huì )忽略 mode。如果沒(méi)有忽略它,那么將首先從它中減去當前的 umask 值。如果除最后 9 位(即 mode 八進(jìn)制的最后 3 位)之外,還設置了其他位,則其他位的含義取決于各個(gè)平臺。在某些平臺上,它們會(huì )被忽略,應顯式調用 chmod() 進(jìn)行設置。

本函數支持 基于目錄描述符的相對路徑。

如果需要創(chuàng )建臨時(shí)目錄,請參閱 tempfile 模塊中的 tempfile.mkdtemp() 函數。

引發(fā)一個(gè) 審計事件 os.mkdir,附帶參數 path、mode、dir_fd。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.makedirs(name, mode=0o777, exist_ok=False)?

遞歸目錄創(chuàng )建函數。與 mkdir() 類(lèi)似,但會(huì )自動(dòng)創(chuàng )建到達最后一級目錄所需要的中間目錄。

mode 參數會(huì )傳遞給 mkdir(),用來(lái)創(chuàng )建最后一級目錄,對于該參數的解釋?zhuān)垍㈤?mkdir() 中的描述。要設置某些新建的父目錄的權限,可以在調用 makedirs() 之前設置 umask?,F有父目錄的權限不會(huì )更改。

If exist_ok is False (the default), a FileExistsError is raised if the target directory already exists.

備注

如果要創(chuàng )建的路徑元素包含 pardir (如 UNIX 系統中的 "..") makedirs() 將無(wú)法明確目標。

本函數能正確處理 UNC 路徑。

引發(fā)一個(gè) 審計事件 os.mkdir,附帶參數 path、mode、dir_fd。

3.2 新版功能: exist_ok 參數。

在 3.4.1 版更改: 在 Python 3.4.1 以前,如果 exist_okTrue,且目錄已存在,且 mode 與現有目錄的權限不匹配,makedirs() 仍會(huì )拋出錯誤。由于無(wú)法安全地實(shí)現此行為,因此在 Python 3.4.1 中將該行為刪除。請參閱 bpo-21082。

在 3.6 版更改: 接受一個(gè) path-like object。

在 3.7 版更改: mode 參數不再影響新創(chuàng )建的中間目錄的權限。

os.mkfifo(path, mode=0o666, *, dir_fd=None)?

創(chuàng )建一個(gè)名為 path 的 FIFO(命名管道,一種先進(jìn)先出隊列),具有以數字表示的權限狀態(tài) mode。將從 mode 中首先減去當前的 umask 值。

本函數支持 基于目錄描述符的相對路徑。

FIFO 是可以像常規文件一樣訪(fǎng)問(wèn)的管道。FIFO 如果沒(méi)有被刪除(如使用 os.unlink()),會(huì )一直存在。通常,FIFO 用作“客戶(hù)端”和“服務(wù)器”進(jìn)程之間的匯合點(diǎn):服務(wù)器打開(kāi) FIFO 進(jìn)行讀取,而客戶(hù)端打開(kāi) FIFO 進(jìn)行寫(xiě)入。請注意,mkfifo() 不會(huì )打開(kāi) FIFO --- 它只是創(chuàng )建匯合點(diǎn)。

可用性: Unix。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.mknod(path, mode=0o600, device=0, *, dir_fd=None)?

創(chuàng )建一個(gè)名為 path 的文件系統節點(diǎn)(文件,設備專(zhuān)用文件或命名管道)。mode 指定權限和節點(diǎn)類(lèi)型,方法是將權限與下列節點(diǎn)類(lèi)型 stat.S_IFREG、stat.S_IFCHR、stat.S_IFBLKstat.S_IFIFO 之一(按位或)組合(這些常量可以在 stat 模塊中找到)。對于 stat.S_IFCHRstat.S_IFBLK,device 參數指定了新創(chuàng )建的設備專(zhuān)用文件(可能會(huì )用到 os.makedev()),否則該參數將被忽略。

本函數支持 基于目錄描述符的相對路徑。

可用性: Unix。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.major(device)?

提取主設備號,提取自原始設備號(通常是 stat 中的 st_devst_rdev 字段)。

os.minor(device)?

提取次設備號,提取自原始設備號(通常是 stat 中的 st_devst_rdev 字段)。

os.makedev(major, minor)?

將主設備號和次設備號組合成原始設備號。

os.pathconf(path, name)?

返回所給名稱(chēng)的文件有關(guān)的系統配置信息。name 指定要查找的配置名稱(chēng),它可以是字符串,是一個(gè)系統已定義的名稱(chēng),這些名稱(chēng)定義在不同標準(POSIX.1,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱(chēng)。當前操作系統已定義的名稱(chēng)在 pathconf_names 字典中給出。對于未包含在該映射中的配置名稱(chēng),也可以傳遞一個(gè)整數作為 name。

如果 name 是一個(gè)字符串且不是已定義的名稱(chēng),將拋出 ValueError 異常。如果當前系統不支持 name 指定的配置名稱(chēng),即使該名稱(chēng)存在于 pathconf_names,也會(huì )拋出 OSError 異常,錯誤碼為 errno.EINVAL。

本函數支持 指定文件描述符為參數。

可用性: Unix。

在 3.6 版更改: 接受一個(gè) path-like object。

os.pathconf_names?

字典,表示映射關(guān)系,為 pathconf()fpathconf() 可接受名稱(chēng)與操作系統為這些名稱(chēng)定義的整數值之間的映射。這可用于判斷系統已定義了哪些名稱(chēng)。

可用性: Unix。

返回一個(gè)字符串,為符號鏈接指向的實(shí)際路徑。其結果可以是絕對或相對路徑。如果是相對路徑,則可用 os.path.join(os.path.dirname(path), result) 轉換為絕對路徑。

如果 path 是字符串對象(直接傳入或通過(guò) PathLike 接口間接傳入),則結果也將是字符串對象,且此類(lèi)調用可能會(huì )引發(fā) UnicodeDecodeError。如果 path 是字節對象(直接傳入或間接傳入),則結果將會(huì )是字節對象。

本函數支持 基于目錄描述符的相對路徑。

當嘗試解析的路徑可能含有鏈接時(shí),請改用 realpath() 以正確處理遞歸和平臺差異。

可用性: Unix, Windows。

在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 在 Unix 上可以接受一個(gè) 類(lèi)路徑對象。

在 3.8 版更改: 在 Windows 上接受 類(lèi)路徑對象 和字節對象。

在 3.8 版更改: 增加了對目錄鏈接的支持,且返回值改為了“替換路徑”的形式(通常帶有 \\?\ 前綴),而不是先前那樣返回可選的 "print name" 字段。

os.remove(path, *, dir_fd=None)?

移除(刪除)文件 path。 如果 path 是目錄,則會(huì )引發(fā) IsADirectoryError。 請使用 rmdir() 來(lái)刪除目錄。 如果文件不存在,則會(huì )引發(fā) FileNotFoundError。

本函數支持 基于目錄描述符的相對路徑。

在 Windows 上,嘗試刪除正在使用的文件會(huì )拋出異常。而在 Unix 上,雖然該文件的條目會(huì )被刪除,但分配給文件的存儲空間仍然不可用,直到原始文件不再使用為止。

本函數在語(yǔ)義上與 unlink() 相同。

引發(fā)一個(gè) 審計事件 os.remove,附帶參數 path、dir_fd。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.removedirs(name)?

遞歸刪除目錄。工作方式類(lèi)似于 rmdir(),不同之處在于,如果成功刪除了末尾一級目錄,removedirs() 會(huì )嘗試依次刪除 path 中提到的每個(gè)父目錄,直到拋出錯誤為止(但該錯誤會(huì )被忽略,因為這通常表示父目錄不是空目錄)。例如,os.removedirs('foo/bar/baz') 將首先刪除目錄 'foo/bar/baz',然后如果 'foo/bar''foo' 為空,則繼續刪除它們。如果無(wú)法成功刪除末尾一級目錄,則拋出 OSError 異常。

引發(fā)一個(gè) 審計事件 os.remove,附帶參數 path、dir_fd。

在 3.6 版更改: 接受一個(gè) path-like object。

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)?

將文件或目錄 src 重命名為 dst。如果 dst 已存在,則下列情況下將會(huì )操作失敗,并拋出 OSError 的子類(lèi):

在 Windows 上,如果 dst 已存在,則拋出 FileExistsError 異常。

在 Unix 上,如果 src 是文件而 dst 是目錄,將拋出 IsADirectoryError 異常,反之則拋出 NotADirectoryError 異常。如果兩者都是目錄且 dst 為空,則 dst 將被靜默替換。如果 dst 是非空目錄,則拋出 OSError 異常。如果兩者都是文件,則在用戶(hù)具有權限的情況下,將對 dst 進(jìn)行靜默替換。如果 srcdst 在不同的文件系統上,則本操作在某些 Unix 分支上可能會(huì )失敗。如果成功,重命名操作將是一個(gè)原子操作(這是 POSIX 的要求)。

本函數支持將 src_dir_fddst_dir_fd 中的一個(gè)或兩個(gè)指定為 基于目錄描述符的相對路徑。

如果需要在不同平臺上都能替換目標,請使用 replace()。

引發(fā)一個(gè) 審計事件 os.rename 附帶參數 src、dst、src_dir_fd、dst_dir_fd。

3.3 新版功能: src_dir_fddst_dir_fd 參數。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 srcdst。

os.renames(old, new)?

遞歸重命名目錄或文件。工作方式類(lèi)似 rename(),除了會(huì )首先創(chuàng )建新路徑所需的中間目錄。重命名后,將調用 removedirs() 刪除舊路徑中不需要的目錄。

備注

如果用戶(hù)沒(méi)有權限刪除末級的目錄或文件,則本函數可能會(huì )無(wú)法建立新的目錄結構。

引發(fā)一個(gè) 審計事件 os.rename 附帶參數 src、dst、src_dir_fd、dst_dir_fd。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 oldnew。

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)?

Rename the file or directory src to dst. If dst is a non-empty directory, OSError will be raised. If dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement).

本函數支持將 src_dir_fddst_dir_fd 中的一個(gè)或兩個(gè)指定為 基于目錄描述符的相對路徑。

引發(fā)一個(gè) 審計事件 os.rename 附帶參數 src、dst、src_dir_fd、dst_dir_fd。

3.3 新版功能.

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 srcdst。

os.rmdir(path, *, dir_fd=None)?

Remove (delete) the directory path. If the directory does not exist or is not empty, a FileNotFoundError or an OSError is raised respectively. In order to remove whole directory trees, shutil.rmtree() can be used.

本函數支持 基于目錄描述符的相對路徑。

引發(fā)一個(gè) 審計事件 os.rmdir,附帶參數 path、dir_fd。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.scandir(path='.')?

返回一個(gè) os.DirEntry 對象的迭代器,它們對應于由 path 指定目錄中的條目。 這些條目會(huì )以任意順序生成,并且不包括特殊條目 '.''..'。 如果有文件在迭代器創(chuàng )建之后在目錄中被移除或添加,是否要包括該文件對應的條目并沒(méi)有規定。

如果需要文件類(lèi)型或文件屬性信息,使用 scandir() 代替 listdir() 可以大大提高這部分代碼的性能,因為如果操作系統在掃描目錄時(shí)返回的是 os.DirEntry 對象,則該對象包含了這些信息。所有 os.DirEntry 的方法都可能執行一次系統調用,但是 is_dir()is_file() 通常只在有符號鏈接時(shí)才執行一次系統調用。os.DirEntry.stat() 在 Unix 上始終需要一次系統調用,而在 Windows 上只在有符號鏈接時(shí)才需要。

path 可以是 類(lèi)路徑對象。如果 path 是(直接傳入或通過(guò) PathLike 接口間接傳入的) bytes 類(lèi)型,那么每個(gè) os.DirEntrynamepath 屬性將是 bytes 類(lèi)型,其他情況下是 str 類(lèi)型。

本函數也支持 指定文件描述符為參數,其中描述符必須指向目錄。

引發(fā)一個(gè) 審計事件 os.scandir,附帶參數 path。

scandir() 迭代器支持 上下文管理 協(xié)議,并具有以下方法:

scandir.close()?

關(guān)閉迭代器并釋放占用的資源。

當迭代器迭代完畢,或垃圾回收,或迭代過(guò)程出錯時(shí),將自動(dòng)調用本方法。但仍建議顯式調用它或使用 with 語(yǔ)句。

3.6 新版功能.

下面的例子演示了 scandir() 的簡(jiǎn)單用法,用來(lái)顯示給定 path 中所有不以 '.' 開(kāi)頭的文件(不包括目錄)。entry.is_file() 通常不會(huì )增加一次額外的系統調用:

with os.scandir(path) as it:
    for entry in it:
        if not entry.name.startswith('.') and entry.is_file():
            print(entry.name)

備注

在基于 Unix 的系統上,scandir() 使用系統的 opendir()readdir() 函數。在 Windows 上,它使用 Win32 FindFirstFileWFindNextFileW 函數。

3.5 新版功能.

3.6 新版功能: 添加了對 上下文管理 協(xié)議和 close() 方法的支持。如果 scandir() 迭代器沒(méi)有迭代完畢且沒(méi)有顯式關(guān)閉,其析構函數將發(fā)出 ResourceWarning 警告。

本函數接受一個(gè) 類(lèi)路徑對象。

在 3.7 版更改: 在 Unix 上新增支持 指定文件描述符為參數。

class os.DirEntry?

scandir() 生成的對象,用于顯示目錄內某個(gè)條目的文件路徑和其他文件屬性。

scandir() 將在不進(jìn)行額外系統調用的情況下,提供盡可能多的此類(lèi)信息。每次進(jìn)行 stat()lstat() 系統調用時(shí),os.DirEntry 對象會(huì )將結果緩存下來(lái)。

os.DirEntry 實(shí)例不適合存儲在長(cháng)期存在的數據結構中,如果你知道文件元數據已更改,或者自調用 scandir() 以來(lái)已經(jīng)經(jīng)過(guò)了很長(cháng)時(shí)間,請調用 os.stat(entry.path) 來(lái)獲取最新信息。

因為 os.DirEntry 方法可以進(jìn)行系統調用,所以它也可能拋出 OSError 異常。如需精確定位錯誤,可以逐個(gè)調用 os.DirEntry 中的方法來(lái)捕獲 OSError,并適當處理。

為了能直接用作 類(lèi)路徑對象,os.DirEntry 實(shí)現了 PathLike 接口。

os.DirEntry 實(shí)例所包含的屬性和方法如下:

name?

本條目的基本文件名,是根據 scandir()path 參數得出的相對路徑。

如果 scandir()path 參數是 bytes 類(lèi)型,則 name 屬性也是 bytes 類(lèi)型,否則為 str。使用 fsdecode() 解碼 byte 類(lèi)型的文件名。

path?

本條目的完整路徑:等效于 os.path.join(scandir_path, entry.name),其中 scandir_path 就是 scandir()path 參數。僅當 scandir()path 參數為絕對路徑時(shí),本路徑才是絕對路徑。如果 scandir()path 參數是 文件描述符,則 path 屬性與上述 name 屬性相同。

如果 scandir()path 參數是 bytes 類(lèi)型,則 path 屬性也是 bytes 類(lèi)型,否則為 str。使用 fsdecode() 解碼 byte 類(lèi)型的文件名。

inode()?

返回本條目的索引節點(diǎn)號 (inode number)。

這一結果是緩存在 os.DirEntry 對象中的,請調用 os.stat(entry.path, follow_symlinks=False).st_ino 來(lái)獲取最新信息。

一開(kāi)始沒(méi)有緩存時(shí),在 Windows 上需要一次系統調用,但在 Unix 上不需要。

is_dir(*, follow_symlinks=True)?

如果本條目是目錄,或是指向目錄的符號鏈接,則返回 True。如果本條目是文件,或指向任何其他類(lèi)型的文件,或該目錄不再存在,則返回 False。

如果 follow_symlinksFalse,那么僅當本條目為目錄時(shí)返回 True (不跟蹤符號鏈接),如果本條目是任何類(lèi)型的文件,或該文件不再存在,則返回 False。

這一結果是緩存在 os.DirEntry 對象中的,且 follow_symlinksTrueFalse 時(shí)的緩存是分開(kāi)的。請調用 os.stat()stat.S_ISDIR() 來(lái)獲取最新信息。

一開(kāi)始沒(méi)有緩存時(shí),大多數情況下不需要系統調用。特別是對于非符號鏈接,Windows 和 Unix 都不需要系統調用,除非某些 Unix 文件系統(如網(wǎng)絡(luò )文件系統)返回了 dirent.d_type == DT_UNKNOWN。如果本條目是符號鏈接,則需要一次系統調用來(lái)跟蹤它(除非 follow_symlinksFalse)。

本方法可能拋出 OSError 異常,如 PermissionError 異常,但 FileNotFoundError 異常會(huì )被內部捕獲且不會(huì )拋出。

is_file(*, follow_symlinks=True)?

如果本條目是文件,或是指向文件的符號鏈接,則返回 True。如果本條目是目錄,或指向目錄,或指向其他非文件條目,或該文件不再存在,則返回 False。

如果 follow_symlinksFalse,那么僅當本條目為文件時(shí)返回 True (不跟蹤符號鏈接),如果本條目是目錄或其他非文件條目,或該文件不再存在,則返回 False。

這一結果是緩存在 os.DirEntry 對象中的。緩存、系統調用、異常拋出都與 is_dir() 一致。

如果本條目是符號鏈接(即使是斷開(kāi)的鏈接),返回 True。如果是目錄或任何類(lèi)型的文件,或本條目不再存在,返回 False。

這一結果是緩存在 os.DirEntry 對象中的,請調用 os.path.islink() 來(lái)獲取最新信息。

一開(kāi)始沒(méi)有緩存時(shí),大多數情況下不需要系統調用。其實(shí) Windows 和 Unix 都不需要系統調用,除非某些 Unix 文件系統(如網(wǎng)絡(luò )文件系統)返回了 dirent.d_type == DT_UNKNOWN。

本方法可能拋出 OSError 異常,如 PermissionError 異常,但 FileNotFoundError 異常會(huì )被內部捕獲且不會(huì )拋出。

stat(*, follow_symlinks=True)?

返回本條目對應的 stat_result 對象。本方法默認會(huì )跟蹤符號鏈接,要獲取符號鏈接本身的 stat,請添加 follow_symlinks=False 參數。

在 Unix 上,本方法需要一次系統調用。在 Windows 上,僅在 follow_symlinksTrue 且該條目是一個(gè)重解析點(diǎn)(如符號鏈接或目錄結點(diǎn))時(shí),才需要一次系統調用。

在 Windows 上,stat_resultst_ino、st_devst_nlink 屬性總是為零。請調用 os.stat() 以獲得這些屬性。

這一結果是緩存在 os.DirEntry 對象中的,且 follow_symlinksTrueFalse 時(shí)的緩存是分開(kāi)的。請調用 os.stat() 來(lái)獲取最新信息。

注意,os.DirEntrypathlib.Path 的幾個(gè)屬性和方法之間存在很好的對應關(guān)系。具體來(lái)說(shuō)是 name 屬性,以及 is_dir()、is_file()、is_symlink()stat() 方法,在兩個(gè)類(lèi)中具有相同的含義。

3.5 新版功能.

在 3.6 版更改: 添加了對 PathLike 接口的支持。在 Windows 上添加了對 bytes 類(lèi)型路徑的支持。

os.stat(path, *, dir_fd=None, follow_symlinks=True)?

獲取文件或文件描述符的狀態(tài)。在所給路徑上執行等效于 stat() 系統調用的操作。path 可以是字符串類(lèi)型,或(直接傳入或通過(guò) PathLike 接口間接傳入的) bytes 類(lèi)型,或打開(kāi)的文件描述符。返回一個(gè) stat_result 對象。

本函數默認會(huì )跟蹤符號鏈接,要獲取符號鏈接本身的 stat,請添加 follow_symlinks=False 參數,或使用 lstat()。

本函數支持 指定文件描述符為參數不跟蹤符號鏈接。

在 Windows 上,傳入 follow_symlinks=False 將禁用所有名稱(chēng)代理重解析點(diǎn),其中包括符號鏈接和目錄結點(diǎn)。其他類(lèi)型的重解析點(diǎn)將直接打開(kāi),比如不像鏈接的或系統無(wú)法跟蹤的重解析點(diǎn)。當多個(gè)鏈接形成一個(gè)鏈時(shí),本方法可能會(huì )返回原始鏈接的 stat,無(wú)法完整遍歷到非鏈接的對象。在這種情況下,要獲取最終路徑的 stat,請使用 os.path.realpath() 函數盡可能地解析路徑,并在解析結果上調用 lstat()。這不適用于空鏈接或交接點(diǎn),否則會(huì )拋出異常。

示例:

>>>
>>> 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

參見(jiàn)

fstat()lstat() 函數。

3.3 新版功能: 增加 dir_fdfollow_symlinks 參數,可指定文件描述符代替路徑。

在 3.6 版更改: 接受一個(gè) path-like object。

在 3.8 版更改: 在 Windows 上,本方法將跟蹤系統能解析的所有重解析點(diǎn),并且傳入 follow_symlinks=False 會(huì )停止跟蹤所有名稱(chēng)代理重解析點(diǎn)?,F在,如果操作系統遇到無(wú)法跟蹤的重解析點(diǎn),stat 將返回原始路徑的信息,就像已指定 follow_symlinks=False 一樣,而不會(huì )拋出異常。

class os.stat_result?

本對象的屬性大致對應于 stat 結構體成員,主要作為 os.stat()、os.fstat()os.lstat() 的返回值。

屬性:

st_mode?

文件模式:包括文件類(lèi)型和文件模式位(即權限位)。

st_ino?

與平臺有關(guān),但如果不為零,則根據 st_dev 值唯一地標識文件。通常:

  • 在 Unix 上該值表示索引節點(diǎn)號 (inode number)。

  • 在 Windows 上該值表示 文件索引號 。

st_dev?

該文件所在設備的標識符。

硬鏈接的數量。

st_uid?

文件所有者的用戶(hù) ID。

st_gid?

文件所有者的用戶(hù)組 ID。

st_size?

文件大?。ㄒ宰止潪閱挝唬?,文件可以是常規文件或符號鏈接。符號鏈接的大小是它包含的路徑的長(cháng)度,不包括末尾的空字節。

時(shí)間戳:

st_atime?

最近的訪(fǎng)問(wèn)時(shí)間,以秒為單位。

st_mtime?

最近的修改時(shí)間,以秒為單位。

st_ctime?

取決于平臺:

  • 在 Unix 上表示最近的元數據更改時(shí)間,

  • 在 Windows 上表示創(chuàng )建時(shí)間,以秒為單位。

st_atime_ns?

最近的訪(fǎng)問(wèn)時(shí)間,以納秒表示,為整數。

st_mtime_ns?

最近的修改時(shí)間,以納秒表示,為整數。

st_ctime_ns?

取決于平臺:

  • 在 Unix 上表示最近的元數據更改時(shí)間,

  • 在 Windows 上表示創(chuàng )建時(shí)間,以納秒表示,為整數。

備注

st_atime、st_mtimest_ctime 屬性的確切含義和分辨率取決于操作系統和文件系統。例如,在使用 FAT 或 FAT32 文件系統的 Windows 上,st_mtime 有 2 秒的分辨率,而 st_atime 僅有 1 天的分辨率。詳細信息請參閱操作系統文檔。

類(lèi)似地,盡管 st_atime_ns、st_mtime_nsst_ctime_ns 始終以納秒表示,但許多系統并不提供納秒精度。在確實(shí)提供納秒精度的系統上,用于存儲 st_atime、st_mtimest_ctime 的浮點(diǎn)對象無(wú)法保留所有精度,因此不夠精確。如果需要確切的時(shí)間戳,則應始終使用 st_atime_ns、st_mtime_nsst_ctime_ns。

在某些 Unix 系統上(如 Linux 上),以下屬性可能也可用:

st_blocks?

為文件分配的字節塊數,每塊 512 字節。文件是稀疏文件時(shí),它可能小于 st_size/512。

st_blksize?

“首選的” 塊大小,用于提高文件系統 I/O 效率。寫(xiě)入文件時(shí)塊大小太小可能會(huì )導致讀取-修改-重寫(xiě)效率低下。

st_rdev?

設備類(lèi)型(如果是 inode 設備)。

st_flags?

用戶(hù)定義的文件標志位。

在其他 Unix 系統上(如 FreeBSD 上),以下屬性可能可用(但僅當 root 使用它們時(shí)才被填充):

st_gen?

文件生成號。

st_birthtime?

文件創(chuàng )建時(shí)間。

在 Solaris 及其衍生版本上,以下屬性可能也可用:

st_fstype?

文件所在文件系統的類(lèi)型的唯一標識,為字符串。

On macOS systems, the following attributes may also be available:

st_rsize?

文件的實(shí)際大小。

st_creator?

文件的創(chuàng )建者。

st_type?

文件類(lèi)型。

在 Windows 系統上,以下屬性也可用:

st_file_attributes?

Windows 文件屬性:dwFileAttributes,由 GetFileInformationByHandle() 返回的 BY_HANDLE_FILE_INFORMATION 結構體的成員之一。請參閱 stat 模塊中的 FILE_ATTRIBUTE_* 常量。

st_reparse_tag?

st_file_attributes 存在 FILE_ATTRIBUTE_REPARSE_POINT 集合時(shí),本字段包含重解析點(diǎn)類(lèi)型標記。請參閱 stat 模塊中的 IO_REPARSE_TAG_* 常量。

標準模塊 stat 中定義了函數和常量,這些函數和常量可用于從 stat 結構體中提取信息。(在 Windows 上,某些項填充的是虛值。)

為了向后兼容,一個(gè) stat_result 實(shí)例還可以作為至少包含 10 個(gè)整數的元組訪(fǎng)問(wèn),以提供 stat 結構中最重要(和可移植)的成員,整數順序為 st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime。某些實(shí)現可能在末尾還有更多項。為了與舊版 Python 兼容,以元組形式訪(fǎng)問(wèn) stat_result 始終返回整數。

3.3 新版功能: 添加了 st_atime_ns、st_mtime_nsst_ctime_ns 成員。

3.5 新版功能: 在 Windows 上添加了 st_file_attributes 成員。

在 3.5 版更改: 在 Windows 上,如果可用,會(huì )返回文件索引作為 st_ino 的值。

3.7 新版功能: 在 Solaris 及其衍生版本上添加了 st_fstype 成員。

3.8 新版功能: 在 Windows 上添加了 st_reparse_tag 成員。

在 3.8 版更改: 在 Windows 上,st_mode 成員現在可以根據需要將特殊文件標識為 S_IFCHR、S_IFIFOS_IFBLK。

os.statvfs(path)?

在所給的路徑上執行 statvfs() 系統調用。返回值是一個(gè)對象,其屬性描述了所給路徑上的文件系統,并且與 statvfs 結構體的成員相對應,即:f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax, f_fsid。

f_flag 屬性位定義了兩個(gè)模塊級常量:如果存在 ST_RDONLY 位,則文件系統以只讀掛載;如果存在 ST_NOSUID 位,則文件系統禁用或不支持 setuid/setgid 位。

為基于 GNU/glibc 的系統還定義了額外的模塊級常量。它們是 ST_NODEV (禁止訪(fǎng)問(wèn)設備專(zhuān)用文件),ST_NOEXEC (禁止執行程序),ST_SYNCHRONOUS (寫(xiě)入后立即同步),ST_MANDLOCK (允許文件系統上的強制鎖定),ST_WRITE (寫(xiě)入文件/目錄/符號鏈接),ST_APPEND (僅追加文件),ST_IMMUTABLE (不可變文件),ST_NOATIME (不更新訪(fǎng)問(wèn)時(shí)間),ST_NODIRATIME (不更新目錄訪(fǎng)問(wèn)時(shí)間),ST_RELATIME (相對于 mtime/ctime 更新訪(fǎng)問(wèn)時(shí)間)。

本函數支持 指定文件描述符為參數。

可用性: Unix。

在 3.2 版更改: 添加了 ST_RDONLYST_NOSUID 常量。

3.3 新版功能: 新增支持將 path 參數指定為打開(kāi)的文件描述符。

在 3.4 版更改: 添加了 ST_NODEV、ST_NOEXEC、ST_SYNCHRONOUS、ST_MANDLOCK、ST_WRITE、ST_APPEND、ST_IMMUTABLE、ST_NOATIME、ST_NODIRATIMEST_RELATIME 常量。

在 3.6 版更改: 接受一個(gè) path-like object。

3.7 新版功能: 添加了 f_fsid。

os.supports_dir_fd?

一個(gè) set 對象,指示 os 模塊中的哪些函數接受一個(gè)打開(kāi)的文件描述符作為 dir_fd 參數。不同平臺提供的功能不同,且 Python 用于實(shí)現 dir_fd 參數的底層函數并非在 Python 支持的所有平臺上都可用??紤]到一致性,支持 dir_fd 的函數始終允許指定描述符,但如果在底層不支持時(shí)調用了該函數,則會(huì )拋出異常。(在所有平臺上始終支持將 dir_fd 指定為 None。)

要檢查某個(gè)函數是否接受打開(kāi)的文件描述符作為 dir_fd 參數,請在 supports_dir_fd 前使用 in 運算符。例如,如果 os.stat() 在當前平臺上接受打開(kāi)的文件描述符作為 dir_fd 參數,則此表達式的計算結果為 True:

os.stat in os.supports_dir_fd

目前 dir_fd 參數僅在 Unix 平臺上有效,在 Windows 上均無(wú)效。

3.3 新版功能.

os.supports_effective_ids?

一個(gè) set 對象,指示 os.access() 是否允許在當前平臺上將其 effective_ids 參數指定為 True。(所有平臺都支持將 effective_ids 指定為 False。)如果當前平臺支持,則集合將包含 os.access(),否則集合為空。

如果當前平臺上的 os.access() 支持 effective_ids=True,則此表達式的計算結果為 True:

os.access in os.supports_effective_ids

目前僅 Unix 平臺支持 effective_ids,Windows 不支持。

3.3 新版功能.

os.supports_fd?

一個(gè) set 對象,指示在當前平臺上 os 模塊中的哪些函數接受一個(gè)打開(kāi)的文件描述符作為 path 參數。不同平臺提供的功能不同,且 Python 所使用到的底層函數(用于實(shí)現接受描述符作為 path)并非在 Python 支持的所有平臺上都可用。

要判斷某個(gè)函數是否接受打開(kāi)的文件描述符作為 path 參數,請在 supports_fd 前使用 in 運算符。例如,如果 os.chdir() 在當前平臺上接受打開(kāi)的文件描述符作為 path 參數,則此表達式的計算結果為 True:

os.chdir in os.supports_fd

3.3 新版功能.

一個(gè) set 對象,指示在當前平臺上 os 模塊中的哪些函數的 follow_symlinks 參數可指定為 False。不同平臺提供的功能不同,且 Python 用于實(shí)現 follow_symlinks 的底層函數并非在 Python 支持的所有平臺上都可用??紤]到一致性,支持 follow_symlinks 的函數始終允許將其指定為 False,但如果在底層不支持時(shí)調用了該函數,則會(huì )拋出異常。(在所有平臺上始終支持將 follow_symlinks 指定為 True。)

要檢查某個(gè)函數的 follow_symlinks 參數是否可以指定為 False,請在 supports_follow_symlinks 前使用 in 運算符。例如,如果在當前平臺上調用 os.stat() 時(shí)可以指定 follow_symlinks=False,則此表達式的計算結果為 True:

os.stat in os.supports_follow_symlinks

3.3 新版功能.

創(chuàng )建一個(gè)指向 src 的符號鏈接,名為 dst。

在 Windows 上,符號鏈接可以表示文件或目錄兩種類(lèi)型,并且不會(huì )動(dòng)態(tài)改變類(lèi)型。如果目標存在,則新建鏈接的類(lèi)型將與目標一致。否則,如果 target_is_directoryTrue,則符號鏈接將創(chuàng )建為目錄鏈接,為 False (默認)將創(chuàng )建為文件鏈接。在非 Windows 平臺上,target_is_directory 被忽略。

本函數支持 基于目錄描述符的相對路徑。

備注

在 Windows 10 或更高版本上,如果啟用了開(kāi)發(fā)人員模式,非特權帳戶(hù)可以創(chuàng )建符號鏈接。如果開(kāi)發(fā)人員模式不可用/未啟用,則需要 SeCreateSymbolicLinkPrivilege 權限,或者該進(jìn)程必須以管理員身份運行。

當本函數由非特權賬戶(hù)調用時(shí),拋出 OSError 異常。

引發(fā)一個(gè) 審計事件 os.symlink,附帶參數 src、dst、dir_fd。

可用性: Unix, Windows。

在 3.2 版更改: 添加對 Windows 6.0 (Vista) 符號鏈接的支持。

3.3 新版功能: 添加了 dir_fd 參數,現在在非 Windows 平臺上允許 target_is_directory 參數。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 srcdst。

在 3.8 版更改: 針對啟用了開(kāi)發(fā)人員模式的 Windows,添加了非特權賬戶(hù)創(chuàng )建符號鏈接的支持。

os.sync()?

強制將所有內容寫(xiě)入磁盤(pán)。

可用性: Unix。

3.3 新版功能.

os.truncate(path, length)?

截斷 path 對應的文件,以使其最大為 length 字節。

本函數支持 指定文件描述符為參數。

引發(fā)一個(gè) 審計事件 os.truncate,附帶參數 path, length。

可用性: Unix, Windows。

3.3 新版功能.

在 3.5 版更改: 添加了 Windows 支持

在 3.6 版更改: 接受一個(gè) path-like object。

移除(刪除)文件 path。該函數在語(yǔ)義上與 remove() 相同,unlink 是其傳統的 Unix 名稱(chēng)。請參閱 remove() 的文檔以獲取更多信息。

引發(fā)一個(gè) 審計事件 os.remove,附帶參數 path、dir_fd。

3.3 新版功能: dir_fd 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)?

設置文件 path 的訪(fǎng)問(wèn)時(shí)間和修改時(shí)間。

utime()timesns 兩個(gè)可選參數,它們指定了設置給 path 的時(shí)間,用法如下:

  • 如果指定 ns,它必須是一個(gè) (atime_ns, mtime_ns) 形式的二元組,其中每個(gè)成員都是一個(gè)表示納秒的整數。

  • 如果 times 不為 None,則它必須是 (atime, mtime) 形式的二元組,其中每個(gè)成員都是一個(gè)表示秒的 int 或 float。

  • 如果 timesNone 且未指定 ns,則相當于指定 ns=(atime_ns, mtime_ns),其中兩個(gè)時(shí)間均為當前時(shí)間。

同時(shí)為 timesns 指定元組會(huì )出錯。

注意,根據操作系統記錄訪(fǎng)問(wèn)時(shí)間和修改時(shí)間的分辨率,后續的 stat() 調用可能不會(huì )返回此處設置的確切時(shí)間。請參閱 stat()。保留精確時(shí)間的最佳方法是使用 os.stat() 結果對象中的 st_atime_nsst_mtime_ns 字段,并將 ns 參數設置為 utime。

本函數支持 指定文件描述符、指定基于目錄描述符的相對路徑不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.utime,附帶參數 path、times、ns、dir_fd。

3.3 新版功能: 新增支持將 path 參數指定為打開(kāi)的文件描述符,以及支持 dir_fd、follow_symlinksns 參數。

在 3.6 版更改: 接受一個(gè) path-like object。

os.walk(top, topdown=True, onerror=None, followlinks=False)?

生成目錄樹(shù)中的文件名,方式是按上->下或下->上順序瀏覽目錄樹(shù)。對于以 top 為根的目錄樹(shù)中的每個(gè)目錄(包括 top 本身),它都會(huì )生成一個(gè)三元組 (dirpath, dirnames, filenames)。

dirpath 是表示目錄路徑的字符串。 dirnamesdirpath 中子目錄名稱(chēng)組成的列表 (excluding '.' and '..')。 filenamesdirpath 中非目錄文件名稱(chēng)組成的列表。 請注意列表中的名稱(chēng)不帶路徑部分。 要獲取 dirpath 中文件或目錄的完整路徑(以 top 打頭),請執行 os.path.join(dirpath, name)。 列表是否排序取決于具體文件系統。 如果有文件或列表生成期間被移除或添加到 dirpath 目錄中,是否要包括該文件的名稱(chēng)并沒(méi)有規定。

如果可選參數 topdownTrue 或未指定,則在所有子目錄的三元組之前生成父目錄的三元組(目錄是自上而下生成的)。如果 topdownFalse,則在所有子目錄的三元組生成之后再生成父目錄的三元組(目錄是自下而上生成的)。無(wú)論 topdown 為何值,在生成目錄及其子目錄的元組之前,都將檢索全部子目錄列表。

topdownTrue 時(shí),調用者可以就地修改 dirnames 列表(也許用到了 del 或切片),而 walk() 將僅僅遞歸到仍保留在 dirnames 中的子目錄內。這可用于減少搜索、加入特定的訪(fǎng)問(wèn)順序,甚至可在繼續 walk() 之前告知 walk() 由調用者新建或重命名的目錄的信息。當 topdownFalse 時(shí),修改 dirnames 對 walk 的行為沒(méi)有影響,因為在自下而上模式中,dirnames 中的目錄是在 dirpath 本身之前生成的。

默認將忽略 scandir() 調用中的錯誤。如果指定了可選參數 onerror,它應該是一個(gè)函數。出錯時(shí)它會(huì )被調用,參數是一個(gè) OSError 實(shí)例。它可以報告錯誤然后繼續遍歷,或者拋出異常然后中止遍歷。注意,可以從異常對象的 filename 屬性中獲取出錯的文件名。

walk() 默認不會(huì )遞歸進(jìn)指向目錄的符號鏈接??梢栽谥С址栨溄拥南到y上將 followlinks 設置為 True,以訪(fǎng)問(wèn)符號鏈接指向的目錄。

備注

注意,如果鏈接指向自身的父目錄,則將 followlinks 設置為 True 可能導致無(wú)限遞歸。walk() 不會(huì )記錄它已經(jīng)訪(fǎng)問(wèn)過(guò)的目錄。

備注

如果傳入的是相對路徑,請不要在恢復 walk() 之間更改當前工作目錄。walk() 不會(huì )更改當前目錄,并假定其調用者也不會(huì )更改當前目錄。

下面的示例遍歷起始目錄內所有子目錄,打印每個(gè)目錄內的文件占用的字節數,CVS 子目錄不會(huì )被遍歷:

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

在下一個(gè)示例(shutil.rmtree() 的簡(jiǎn)單實(shí)現)中,必須使樹(shù)自下而上遍歷,因為 rmdir() 只允許在目錄為空時(shí)刪除目錄:

# 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))

引發(fā)一個(gè) 審計事件 os.walk,附帶參數 top, topdown, onerror, followlinks。

在 3.5 版更改: 現在,本函數調用的是 os.scandir() 而不是 os.listdir(),從而減少了調用 os.stat() 的次數而變得更快。

在 3.6 版更改: 接受一個(gè) 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、dirnamesfilenameswalk() 輸出的相同,dirfd 是指向目錄 dirpath 的文件描述符。

本函數始終支持 基于目錄描述符的相對路徑不跟蹤符號鏈接。但是請注意,與其他函數不同,fwalk()follow_symlinks 的默認值為 False。

備注

由于 fwalk() 會(huì )生成文件描述符,而它們僅在下一個(gè)迭代步驟前有效,因此如果要將描述符保留更久,則應復制它們(比如使用 dup())。

下面的示例遍歷起始目錄內所有子目錄,打印每個(gè)目錄內的文件占用的字節數,CVS 子目錄不會(huì )被遍歷:

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

在下一個(gè)示例中,必須使樹(shù)自下而上遍歷,因為 rmdir() 只允許在目錄為空時(shí)刪除目錄:

# 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)

引發(fā)一個(gè) 審計事件 os.fwalk,附帶參數 top, topdown, onerror, follow_symlinks, dir_fd。

可用性: Unix。

3.3 新版功能.

在 3.6 版更改: 接受一個(gè) path-like object。

在 3.7 版更改: 添加了對 bytes 類(lèi)型路徑的支持。

os.memfd_create(name[, flags=os.MFD_CLOEXEC])?

創(chuàng )建一個(gè)匿名文件,返回指向該文件的文件描述符。flags 必須是系統上可用的 os.MFD_* 常量之一(或將它們按位“或”組合起來(lái))。新文件描述符默認是 不可繼承的。

name 提供的名稱(chēng)會(huì )被用作文件名,并且 /proc/self/fd/ 目錄中相應符號鏈接的目標將顯示為該名稱(chēng)。顯示的名稱(chēng)始終以 memfd: 為前綴,并且僅用于調試目的。名稱(chēng)不會(huì )影響文件描述符的行為,因此多個(gè)文件可以有相同的名稱(chēng),不會(huì )有副作用。

可用性:Linux 3.17 或更高版本,且裝有 glibc 2.27 或更高版本。

3.8 新版功能.

os.MFD_CLOEXEC?
os.MFD_ALLOW_SEALING?
os.MFD_HUGETLB?
os.MFD_HUGE_SHIFT?
os.MFD_HUGE_MASK?
os.MFD_HUGE_64KB?
os.MFD_HUGE_512KB?
os.MFD_HUGE_1MB?
os.MFD_HUGE_2MB?
os.MFD_HUGE_8MB?
os.MFD_HUGE_16MB?
os.MFD_HUGE_32MB?
os.MFD_HUGE_256MB?
os.MFD_HUGE_512MB?
os.MFD_HUGE_1GB?
os.MFD_HUGE_2GB?
os.MFD_HUGE_16GB?

以上標志位可以傳遞給 memfd_create()。

可用性:Linux 3.17 或更高版本,且裝有 glibc 2.27 或更高版本。MFD_HUGE* 標志僅在 Linux 4.14 及以上可用。

3.8 新版功能.

os.eventfd(initval[, flags=os.EFD_CLOEXEC])?

創(chuàng )建并返回一個(gè)事件文件描述符。此文件描述符支持緩沖區大小為 8 的原生 read()write() 操作、select() 、poll() 等類(lèi)似操作。更多信息請參閱 man 文檔 eventfd(2)。默認情況下,新的文件描述符是 non-inheritable。

initval 是事件計數器的初始值。初始值必須是一個(gè) 32 位無(wú)符號整數。請注意,雖然事件計數器是一個(gè)無(wú)符號的 64 位整數,其最大值為 2 64-2,但初始值仍被限制為 32 位無(wú)符號整數。

flags 可由 EFD_CLOEXEC 、 EFD_NONBLOCKEFD_SEMAPHORE 組合而成。

如果設置了 EFD_SEMAPHORE,并且事件計數器非零,那么 eventfd_read() 將返回 1 并將計數器遞減 1。

如果未設置 EFD_SEMAPHORE,并且事件計數器非零,那么 eventfd_read() 返回當前的事件計數器值,并將計數器重置為零。

如果事件計數器為 0,并且未設置 EFD_NONBLOCK,那么 eventfd_read() 會(huì )阻塞。

eventfd_write() 會(huì )遞增事件計數器。如果寫(xiě)操作會(huì )讓計數器的增量大于264-2,則寫(xiě)入會(huì )被阻止。

示例:

import os

# semaphore with start value '1'
fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFC_CLOEXEC)
try:
    # acquire semaphore
    v = os.eventfd_read(fd)
    try:
        do_work()
    finally:
        # release semaphore
        os.eventfd_write(fd, v)
finally:
    os.close(fd)

可用性 :Linux 2.6.27 以上版本,帶有 glibc 2.8 以上版本。

3.10 新版功能.

os.eventfd_read(fd)?

從一個(gè) eventfd() 文件描述符中讀取數據,并返回一個(gè) 64 位無(wú)符號整數。該函數不會(huì )校驗 fd 是否為 eventfd()。

可用性 :參見(jiàn) eventfd() 。

3.10 新版功能.

os.eventfd_write(fd, value)?

向一個(gè) eventfd() 文件描述符加入數據。value 必須是一個(gè) 64 位無(wú)符號整數。本函數不會(huì )校驗 fd 是否為 eventfd()。

可用性 :參見(jiàn) eventfd() 。

3.10 新版功能.

os.EFD_CLOEXEC?

為新的 eventfd() 文件描述符設置 close-on-exec 標志。

可用性 :參見(jiàn) eventfd() 。

3.10 新版功能.

os.EFD_NONBLOCK?

為新的 eventfd() 文件描述符設置 O_NONBLOCK 狀態(tài)標志。

可用性 :參見(jiàn) eventfd() 。

3.10 新版功能.

os.EFD_SEMAPHORE?

為讀取 eventfd() 文件描述符的操作提供類(lèi)似信號量的控制。在讀取時(shí),內部計數器遞減 1。

可用性: Linux 2.6.30 以上版本,帶有 glibc 2.8 以上版本。

3.10 新版功能.

Linux 擴展屬性?

3.3 新版功能.

這些函數僅在 Linux 上可用。

os.getxattr(path, attribute, *, follow_symlinks=True)?

返回 path 的擴展文件系統屬性 attribute 的值。attribute 可以是 bytes 或 str (直接傳入或通過(guò) PathLike 接口間接傳入)。如果是 str,則使用文件系統編碼來(lái)編碼字符串。

本函數支持 指定文件描述符為參數不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.getxattr,附帶參數 path、attribute。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 pathattribute。

os.listxattr(path=None, *, follow_symlinks=True)?

返回一個(gè)列表,包含 path 的所有擴展文件系統屬性。列表中的屬性都表示為字符串,它們是根據文件系統編碼解碼出來(lái)的。如果 pathNone,則 listxattr() 將檢查當前目錄。

本函數支持 指定文件描述符為參數不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.listxattr,附帶參數 path。

在 3.6 版更改: 接受一個(gè) path-like object。

os.removexattr(path, attribute, *, follow_symlinks=True)?

移除 path 中的擴展文件系統屬性 attribute。 attribute 應為字節串或字符串類(lèi)型(通過(guò) PathLike 接口直接或間接得到)。 若為字符串類(lèi)型,則用 filesystem encoding and error handler 進(jìn)行編碼。

本函數支持 指定文件描述符為參數不跟蹤符號鏈接。

引發(fā)一個(gè) 審計事件 os.removexattr,附帶參數 path、attribute。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 pathattribute。

os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)?

path 的文件系統擴展屬性 attribute 設為 value。 attribute 必須是一個(gè)字節串或字符串,不含 NUL(通過(guò) PathLike 接口直接或間接得到)。 若為字符串,將用 filesystem encoding and error handler 進(jìn)行編碼。 flags 可以是 XATTR_REPLACEXATTR_CREATE。 如果給出 XATTR_REPLACE 而屬性不存在,則會(huì )觸發(fā) ENODATA。 如果給出了 XATTR_CREATE 而屬性已存在,則不會(huì )創(chuàng )建屬性并將觸發(fā) EEXISTS。

本函數支持 指定文件描述符為參數不跟蹤符號鏈接。

備注

Linux kernel 2.6.39 以下版本的一個(gè) bug 導致在某些文件系統上,flags 參數會(huì )被忽略。

引發(fā)一個(gè) 審計事件 os.setxattr,附帶參數 path、attribute、value、flags。

在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對象 作為 pathattribute。

os.XATTR_SIZE_MAX?

一條擴展屬性的值的最大大小。在當前的 Linux 上是 64 KiB。

os.XATTR_CREATE?

這是 setxattr() 的 flags 參數的可取值,它表示該操作必須創(chuàng )建一個(gè)屬性。

os.XATTR_REPLACE?

這是 setxattr() 的 flags 參數的可取值,它表示該操作必須替換現有屬性。

進(jìn)程管理?

下列函數可用于創(chuàng )建和管理進(jìn)程。

所有 exec* 函數都接受一個(gè)參數列表,用來(lái)給新程序加載到它的進(jìn)程中。在所有情況下,傳遞給新程序的第一個(gè)參數是程序本身的名稱(chēng),而不是用戶(hù)在命令行上輸入的參數。對于 C 程序員來(lái)說(shuō),這就是傳遞給 main() 函數的 argv[0]。例如,os.execv('/bin/echo', ['foo', 'bar']) 只會(huì )在標準輸出上打印 bar,而 foo 會(huì )被忽略。

os.abort()?

發(fā)送 SIGABRT 信號到當前進(jìn)程。在 Unix 上,默認行為是生成一個(gè)核心轉儲。在 Windows 上,該進(jìn)程立即返回退出代碼 3。請注意,使用 signal.signal() 可以為 SIGABRT 注冊 Python 信號處理程序,而調用本函數將不會(huì )調用按前述方法注冊的程序。

os.add_dll_directory(path)?

將路徑添加到 DLL 搜索路徑。

This search path is used when resolving dependencies for imported extension modules (the module itself is resolved through sys.path), and also by ctypes.

要移除目錄,可以在返回的對象上調用 close(),也可以在 with 語(yǔ)句內使用本方法。

參閱 Microsoft 文檔 獲取如何加載 DLL 的信息。

引發(fā)一個(gè) 審計事件 os.add_dll_directory,附帶參數 path。

可用性: Windows。

3.8 新版功能: 早期版本的 CPython 解析 DLL 時(shí)用的是當前進(jìn)程的默認行為。這會(huì )導致不一致,比如不是每次都會(huì )去搜索 PATH 和當前工作目錄,且系統函數(如 AddDllDirectory )失效。

在 3.8 中,DLL 的兩種主要加載方式現在可以顯式覆蓋進(jìn)程的行為,以確保一致性。請參閱 移植說(shuō)明 了解如何更新你的庫。

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)?

這些函數都將執行一個(gè)新程序,以替換當前進(jìn)程。它們沒(méi)有返回值。在 Unix 上,新程序會(huì )加載到當前進(jìn)程中,且進(jìn)程號與調用者相同。過(guò)程中的錯誤會(huì )被報告為 OSError 異常。

當前進(jìn)程會(huì )被立即替換。打開(kāi)的文件對象和描述符都不會(huì )刷新,因此如果這些文件上可能緩沖了數據,則應在調用 exec* 函數之前使用 sys.stdout.flush()os.fsync() 刷新它們。

exec* 函數的 "l" 和 "v" 變體不同在于命令行參數的傳遞方式。如果在編碼時(shí)固定了參數數量,則 "l" 變體可能是最方便的,各參數作為 execl*() 函數的附加參數傳入即可。當參數數量可變時(shí),"v" 變體更方便,參數以列表或元組的形式作為 args 參數傳遞。在這兩種情況下,子進(jìn)程的第一個(gè)參數都應該是即將運行的命令名稱(chēng),但這不是強制性的。

結尾包含 "p" 的變體(execlp()、execlpe()、execvp()execvpe() )將使用 PATH 環(huán)境變量來(lái)查找程序 file。當環(huán)境被替換時(shí)(使用下一段討論的 exec*e 變體之一),PATH 變量將來(lái)自于新環(huán)境。其他變體 execl()、execle()、execv()execve() 不使用 PATH 變量來(lái)查找程序,因此 path 必須包含正確的絕對或相對路徑。

對于 execle()、execlpe()、execve()execvpe() (都以 "e" 結尾),env 參數是一個(gè)映射,用于定義新進(jìn)程的環(huán)境變量(代替當前進(jìn)程的環(huán)境變量)。而函數 execl()、execlp()、execv()execvp() 會(huì )將當前進(jìn)程的環(huán)境變量過(guò)繼給新進(jìn)程。

某些平臺上的 execve() 可以將 path 指定為打開(kāi)的文件描述符。當前平臺可能不支持此功能,可以使用 os.supports_fd 檢查它是否支持。如果不可用,則使用它會(huì )拋出 NotImplementedError 異常。

引發(fā)一個(gè) 審計事件 os.exec,附帶參數 path、args、env。

可用性: Unix, Windows。

3.3 新版功能: 新增支持將 execve()path 參數指定為打開(kāi)的文件描述符。

在 3.6 版更改: 接受一個(gè) path-like object。

os._exit(n)?

以狀態(tài)碼 n 退出進(jìn)程,不會(huì )調用清理處理程序,不會(huì )刷新 stdio,等等。

備注

退出的標準方法是使用 sys.exit(n)。而 _exit() 通常只應在 fork() 出的子進(jìn)程中使用。

以下是已定義的退出代碼,可以用于 _exit(),盡管它們不是必需的。這些退出代碼通常用于 Python 編寫(xiě)的系統程序,例如郵件服務(wù)器的外部命令傳遞程序。

備注

其中部分退出代碼在部分 Unix 平臺上可能不可用,因為平臺間存在差異。如果底層平臺定義了這些常量,那上層也會(huì )定義。

os.EX_OK?

Exit code that means no error occurred. May be taken from the defined value of EXIT_SUCCESS on some platforms. Generally has a value of zero.

可用性: Unix, Windows。

os.EX_USAGE?

退出代碼,表示命令使用不正確,如給出的參數數量有誤。

可用性: Unix。

os.EX_DATAERR?

退出代碼,表示輸入數據不正確。

可用性: Unix。

os.EX_NOINPUT?

退出代碼,表示某個(gè)輸入文件不存在或不可讀。

可用性: Unix。

os.EX_NOUSER?

退出代碼,表示指定的用戶(hù)不存在。

可用性: Unix。

os.EX_NOHOST?

退出代碼,表示指定的主機不存在。

可用性: Unix。

os.EX_UNAVAILABLE?

退出代碼,表示所需的服務(wù)不可用。

可用性: Unix。

os.EX_SOFTWARE?

退出代碼,表示檢測到內部軟件錯誤。

可用性: Unix。

os.EX_OSERR?

退出代碼,表示檢測到操作系統錯誤,例如無(wú)法 fork 或創(chuàng )建管道。

可用性: Unix。

os.EX_OSFILE?

退出代碼,表示某些系統文件不存在、無(wú)法打開(kāi)或發(fā)生其他錯誤。

可用性: Unix。

os.EX_CANTCREAT?

退出代碼,表示無(wú)法創(chuàng )建用戶(hù)指定的輸出文件。

可用性: Unix。

os.EX_IOERR?

退出代碼,表示對某些文件進(jìn)行讀寫(xiě)時(shí)發(fā)生錯誤。

可用性: Unix。

os.EX_TEMPFAIL?

退出代碼,表示發(fā)生了暫時(shí)性故障。它可能并非意味著(zhù)真正的錯誤,例如在可重試的情況下無(wú)法建立網(wǎng)絡(luò )連接。

可用性: Unix。

os.EX_PROTOCOL?

退出代碼,表示協(xié)議交換是非法的、無(wú)效的或無(wú)法解讀的。

可用性: Unix。

os.EX_NOPERM?

退出代碼,表示沒(méi)有足夠的權限執行該操作(但不適用于文件系統問(wèn)題)。

可用性: Unix。

os.EX_CONFIG?

退出代碼,表示發(fā)生某種配置錯誤。

可用性: Unix。

os.EX_NOTFOUND?

退出代碼,表示的內容類(lèi)似于“找不到條目”。

可用性: Unix。

os.fork()?

Fork 出一個(gè)子進(jìn)程。在子進(jìn)程中返回 0,在父進(jìn)程中返回子進(jìn)程的進(jìn)程號。如果發(fā)生錯誤,則拋出 OSError 異常。

注意,當從線(xiàn)程中使用 fork() 時(shí),某些平臺(包括 FreeBSD <= 6.3 和 Cygwin)存在已知問(wèn)題。

引發(fā)一個(gè) 審計事件 os.fork,沒(méi)有附帶參數。

在 3.8 版更改: 不再支持在子解釋器中調用 fork() (將拋出 RuntimeError 異常)。

警告

有關(guān) SSL 模塊與 fork() 結合的應用,請參閱 ssl。

可用性: Unix。

os.forkpty()?

Fork 出一個(gè)子進(jìn)程,使用新的偽終端作為子進(jìn)程的控制終端。返回一對 (pid, fd),其中 pid 在子進(jìn)程中為 0,這是父進(jìn)程中新子進(jìn)程的進(jìn)程號,而 fd 是偽終端主設備的文件描述符。對于更便于移植的方法,請使用 pty 模塊。如果發(fā)生錯誤,則拋出 OSError 異常。

引發(fā)一個(gè) 審計事件 os.forkpty,沒(méi)有附帶參數。

在 3.8 版更改: 不再支持在子解釋器中調用 forkpty() (將拋出 RuntimeError 異常)。

可用性: 某些 Unix。

os.kill(pid, sig)?

將信號 sig 發(fā)送至進(jìn)程 pid。特定平臺上可用的信號常量定義在 signal 模塊中。

Windows: signal.CTRL_C_EVENTsignal.CTRL_BREAK_EVENT 信號是特殊信號,只能發(fā)送給共享同一個(gè)控制臺窗口的控制臺進(jìn)程,如某些子進(jìn)程。sig 取任何其他值將導致該進(jìn)程被 TerminateProcess API 無(wú)條件終止,且退出代碼為 sig。Windows 版本的 kill() 還需要傳入待結束進(jìn)程的句柄。

另請參閱 signal.pthread_kill()。

引發(fā)一個(gè) 審計事件 os.kill,附帶參數 pid、sig。

3.2 新版功能: Windows 支持。

os.killpg(pgid, sig)?

將信號 sig 發(fā)送給進(jìn)程組 pgid。

引發(fā)一個(gè) 審計事件 os.killpg,附帶參數 pgid、sig。

可用性: Unix。

os.nice(increment)?

將進(jìn)程的優(yōu)先級(nice 值)增加 increment,返回新的 nice 值。

可用性: Unix。

os.pidfd_open(pid, flags=0)?

返回一個(gè)文件描述符,它指向進(jìn)程 pid。該描述符可用于管理進(jìn)程,避免出現競爭和信號。flags 參數提供給將來(lái)擴展使用,當前沒(méi)有定義標志值。

更多詳細信息請參閱 pidfd_open(2) 手冊頁(yè)。

可用性: Linux 5.3+。

3.9 新版功能.

os.plock(op)?

將程序段鎖定到內存中。op 的值(定義在 <sys/lock.h> 中)決定了哪些段被鎖定。

可用性: Unix。

os.popen(cmd, mode='r', buffering=- 1)?

Open a pipe to or from command cmd. The return value is an open file object connected to the pipe, which can be read or written depending on whether mode is 'r' (default) or 'w'. The buffering argument have the same meaning as the corresponding argument to the built-in open() function. The returned file object reads or writes text strings rather than bytes.

如果子進(jìn)程成功退出,則 close 方法返回 None。如果發(fā)生錯誤,則返回子進(jìn)程的返回碼。在 POSIX 系統上,如果返回碼為正,則它就是進(jìn)程返回值左移一個(gè)字節后的值。如果返回碼為負,則進(jìn)程是被信號終止的,返回碼取反后就是該信號。(例如,如果子進(jìn)程被終止,則返回值可能是 - signal.SIGKILL。)在 Windows 系統上,返回值包含子進(jìn)程的返回碼(有符號整數)。

在 Unix 上,waitstatus_to_exitcode() 可以將 close 方法的返回值(即退出狀態(tài),不能是 None)轉換為退出碼。在 Windows 上,close 方法的結果直接就是退出碼(或 None )。

本方法是使用 subprocess.Popen 實(shí)現的,如需更強大的方法來(lái)管理和溝通子進(jìn)程,請參閱該類(lèi)的文檔。

備注

The Python UTF-8 Mode affects encodings used for cmd and pipe contents.

popen() is a simple wrapper around subprocess.Popen. Use subprocess.Popen or subprocess.run() to control options like encodings.

os.posix_spawn(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)?

包裝 posix_spawn() C 庫 API,使其可以從 Python 調用。

大多數用戶(hù)應使用 subprocess.run() 代替 posix_spawn()。

僅位置參數 (Positional-only arguments) path、argsenvexecve() 中的類(lèi)似。

path 形參是可執行文件的路徑,path 中應當包含目錄。 使用 posix_spawnp() 可傳入不帶目錄的可執行文件。

file_actions 參數可以是由元組組成的序列,序列描述了對子進(jìn)程中指定文件描述符采取的操作,這些操作會(huì )在 C 庫實(shí)現的 fork()exec() 步驟間完成。每個(gè)元組的第一個(gè)元素必須是下面列出的三個(gè)類(lèi)型指示符之一,用于描述元組剩余的元素:

os.POSIX_SPAWN_OPEN?

(os.POSIX_SPAWN_OPEN, fd, path, flags, mode)

執行 os.dup2(os.open(path, flags, mode), fd)。

os.POSIX_SPAWN_CLOSE?

(os.POSIX_SPAWN_CLOSE, fd)

執行 os.close(fd)。

os.POSIX_SPAWN_DUP2?

(os.POSIX_SPAWN_DUP2, fd, new_fd)

執行 os.dup2(fd, new_fd)。

這些元組對應于 C 庫 posix_spawn_file_actions_addopen(), posix_spawn_file_actions_addclose()posix_spawn_file_actions_adddup2() API 調用,它們?yōu)檎{用 posix_spawn() 自身做準備。

setpgroup 參數將子進(jìn)程的進(jìn)程組設置為指定值。如果指定值為 0,則子進(jìn)程的進(jìn)程組 ID 將與其進(jìn)程 ID 相同。如果未設置 setpgroup 值,則子進(jìn)程將繼承父進(jìn)程的進(jìn)程組 ID。本參數對應于 C 庫 POSIX_SPAWN_SETPGROUP 標志。

如果 resetids 參數為 True,則會(huì )將子進(jìn)程的有效用戶(hù) ID 和有效組 ID 重置為父進(jìn)程的實(shí)際用戶(hù) ID 和實(shí)際組 ID。如果該參數為 False,則子進(jìn)程保留父進(jìn)程的有效用戶(hù) ID 和有效組 ID。無(wú)論哪種情況,若在可執行文件上啟用了 “設置用戶(hù) ID” 和 “設置組 ID” 權限位,它們將覆蓋有效用戶(hù) ID 和有效組 ID 的設置。本參數對應于 C 庫 POSIX_SPAWN_RESETIDS 標志。

如果 setsid 參數為 True,它將為 posix_spawn 新建一個(gè)會(huì )話(huà) ID。setsid 需要 POSIX_SPAWN_SETSIDPOSIX_SPAWN_SETSID_NP 標志,否則會(huì )拋出 NotImplementedError 異常。

setsigmask 參數將信號掩碼設置為指定的信號集合。如果未使用該參數,則子進(jìn)程將繼承父進(jìn)程的信號掩碼。本參數對應于 C 庫 POSIX_SPAWN_SETSIGMASK 標志。

sigdef 參數將集合中所有信號的操作全部重置為默認。本參數對應于 C 庫 POSIX_SPAWN_SETSIGDEF 標志。

scheduler 參數必須是一個(gè)元組,其中包含調度器策略(可選)以及攜帶了調度器參數的 sched_param 實(shí)例。在調度器策略所在位置為 None 表示未提供該值。本參數是 C 庫 POSIX_SPAWN_SETSCHEDPARAMPOSIX_SPAWN_SETSCHEDULER 標志的組合。

引發(fā)一個(gè) 審計事件 os.posix_spawn,附帶參數 path、argv、env。

3.8 新版功能.

可用性: Unix。

os.posix_spawnp(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)?

包裝 posix_spawnp() C 庫 API,使其可以從 Python 調用。

posix_spawn() 相似,但是系統會(huì )在 PATH 環(huán)境變量指定的目錄列表中搜索可執行文件 executable (與 execvp(3) 相同)。

引發(fā)一個(gè) 審計事件 os.posix_spawn,附帶參數 path、argv、env。

3.8 新版功能.

可用性: 請參閱 posix_spawn() 文檔。

os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)?

注冊可調用對象,在使用 os.fork() 或類(lèi)似的進(jìn)程克隆 API 派生新的子進(jìn)程時(shí),這些對象會(huì )運行。參數是可選的,且為僅關(guān)鍵字 (Keyword-only) 參數。每個(gè)參數指定一個(gè)不同的調用點(diǎn)。

  • before 是一個(gè)函數,在 fork 子進(jìn)程前調用。

  • after_in_parent 是一個(gè)函數,在 fork 子進(jìn)程后從父進(jìn)程調用。

  • after_in_child 是一個(gè)函數,從子進(jìn)程中調用。

只有希望控制權回到 Python 解釋器時(shí),才進(jìn)行這些調用。典型的 子進(jìn)程 啟動(dòng)時(shí)不會(huì )觸發(fā)它們,因為子進(jìn)程不會(huì )重新進(jìn)入解釋器。

在注冊的函數中,用于 fork 前運行的函數將按與注冊相反的順序調用。用于 fork 后(從父進(jìn)程或子進(jìn)程)運行的函數按注冊順序調用。

注意,第三方 C 代碼的 fork() 調用可能不會(huì )調用這些函數,除非它顯式調用了 PyOS_BeforeFork()、PyOS_AfterFork_Parent()PyOS_AfterFork_Child()。

函數注冊后無(wú)法注銷(xiāo)。

可用性: 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)?

在新進(jìn)程中執行程序 path。

(注意,subprocess 模塊提供了更強大的工具來(lái)生成新進(jìn)程并跟蹤執行結果,使用該模塊比使用這些函數更好。尤其應當檢查 使用 subprocess 模塊替換舊函數 部分。)

modeP_NOWAIT 時(shí),本函數返回新進(jìn)程的進(jìn)程號。modeP_WAIT 時(shí),如果進(jìn)程正常退出,返回退出代碼,如果被終止,返回 -signal,其中 signal 是終止進(jìn)程的信號。在 Windows 上,進(jìn)程號實(shí)際上是進(jìn)程句柄,因此可以與 waitpid() 函數一起使用。

注意在 VxWorks 上,新進(jìn)程被終止時(shí),本函數不會(huì )返回 -signal,而是會(huì )拋出 OSError 異常。

spawn* 函數的 "l" 和 "v" 變體不同在于命令行參數的傳遞方式。如果在編碼時(shí)固定了參數數量,則 "l" 變體可能是最方便的,各參數作為 spawnl*() 函數的附加參數傳入即可。當參數數量可變時(shí),"v" 變體更方便,參數以列表或元組的形式作為 args 參數傳遞。在這兩種情況下,子進(jìn)程的第一個(gè)參數都必須是即將運行的命令名稱(chēng)。

結尾包含第二個(gè) "p" 的變體(spawnlp()、spawnlpe()、spawnvp()spawnvpe())將使用 PATH 環(huán)境變量來(lái)查找程序 file。當環(huán)境被替換時(shí)(使用下一段討論的 spawn*e 變體之一),PATH 變量將來(lái)自于新環(huán)境。其他變體 spawnl()、spawnle()、spawnv()spawnve() 不使用 PATH 變量來(lái)查找程序,因此 path 必須包含正確的絕對或相對路徑。

對于 spawnle()、spawnlpe()、spawnve()spawnvpe() (都以 "e" 結尾),env 參數是一個(gè)映射,用于定義新進(jìn)程的環(huán)境變量(代替當前進(jìn)程的環(huán)境變量)。而函數 spawnl()、spawnlp()、spawnv()spawnvp() 會(huì )將當前進(jìn)程的環(huán)境變量過(guò)繼給新進(jìn)程。注意,env 字典中的鍵和值必須是字符串。無(wú)效的鍵或值將導致函數出錯,返回值為 127。

例如,以下對 spawnlp()spawnvpe() 的調用是等效的:

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)

引發(fā)一個(gè) 審計事件 os.spawn,附帶參數 mode、path、args、env。

可用性: Unix, Windows。spawnlp()、spawnlpe()、spawnvp()spawnvpe() 在 Windows 上不可用。spawnle()spawnve() 在 Windows 上不是線(xiàn)程安全的,建議使用 subprocess 模塊替代。

在 3.6 版更改: 接受一個(gè) path-like object。

os.P_NOWAIT?
os.P_NOWAITO?

spawn* 系列函數的 mode 參數的可取值。如果給出這些值中的任何一個(gè),則 spawn*() 函數將在創(chuàng )建新進(jìn)程后立即返回,且返回值為進(jìn)程號。

可用性: Unix, Windows。

os.P_WAIT?

spawn* 系列函數的 mode 參數的可取值。如果將 mode 指定為該值,則 spawn*() 函數將在新進(jìn)程運行完畢后返回,運行成功則返回進(jìn)程的退出代碼,被信號終止則返回 -signal。

可用性: Unix, Windows。

os.P_DETACH?
os.P_OVERLAY?

spawn* 系列函數的 mode 參數的可取值。它們比上面列出的值可移植性差。P_DETACHP_NOWAIT 相似,但是新進(jìn)程會(huì )與父進(jìn)程的控制臺脫離。使用 P_OVERLAY 則會(huì )替換當前進(jìn)程,spawn* 函數將不會(huì )返回。

可用性: Windows。

os.startfile(path[, operation][, arguments][, cwd][, show_cmd])?

使用已關(guān)聯(lián)的應用程序打開(kāi)文件。

operation 未指定或指定為 'open' 時(shí),這類(lèi)似于在 Windows 資源管理器中雙擊文件,或在交互式命令行中將文件名作為 start 命令的參數:通過(guò)擴展名相關(guān)聯(lián)的應用程序(如果有)打開(kāi)文件。

當指定另一個(gè) operation 時(shí),它必須是一個(gè)“命令動(dòng)詞” ("command verb"),該詞指定對文件執行的操作。Microsoft 文檔中的常用動(dòng)詞有 'print''edit' (用于文件),以及 'explore''find' (用于目錄)。

在啟動(dòng)某個(gè)應用程序時(shí),arguments 將作為一個(gè)字符串傳入。若是打開(kāi)某個(gè)文檔,此參數可能沒(méi)什么效果。

默認工作目錄是繼承而來(lái)的,但可以通過(guò) cwd 參數進(jìn)行覆蓋。且應為絕對路徑。相對路徑 path 將據此參數進(jìn)行解析。

show_cmd 可用于覆蓋默認的窗口樣式。是否生效則取決于被啟動(dòng)的應用程序。應為 Win32 函數 ShellExecute() 所支持的整數值。

在關(guān)聯(lián)的應用程序啟動(dòng)后,startfile() 就會(huì )立即返回。 沒(méi)有提供等待應用程序關(guān)閉的選項,也沒(méi)有辦法獲得應用程序的退出狀態(tài)。 path 形參是基于當前目錄或 cwd 的相對路徑。 如果要使用絕對路徑,請確保第一個(gè)字符不為斜杠 ('/') 。 請用 pathlibos.path.normpath() 函數來(lái)保證路徑已按照 Win32 的要求進(jìn)行了正確的編碼。

為了減少解釋器的啟動(dòng)開(kāi)銷(xiāo),直到第一次調用本函數后,才解析 Win32 ShellExecute() 函數。如果無(wú)法解析該函數??,則拋出 NotImplementedError 異常。

引發(fā)一個(gè) 審計事件 os.startfile,附帶參數 path、operation。

引發(fā)一條 審計事件 os.startfile/2,附帶參數為 path、operation、arguments、cwd、show_cmd。

可用性: Windows。

在 3.10 版更改: 加入了 arguments、cwdshow_cmd 參數,以及 os.startfile/2 審計事件。

os.system(command)?

在子外殼程序中執行此命令(一個(gè)字符串)。 這是通過(guò)調用標準 C 函數 system() 來(lái)實(shí)現的,并受到同樣的限制。 對 sys.stdin 的更改等不會(huì )反映在所執行命令的環(huán)境中。 如果 command 生成了任何輸出,它將被發(fā)送到解釋器的標準輸出流。 C 標準沒(méi)有指明這個(gè) C 函數返回值的含義,因此這個(gè) Python 函數的返回值取決于具體系統。

在 Unix 上,返回值為進(jìn)程的退出狀態(tài),以針對 wait() 而指定的格式進(jìn)行編碼。

在 Windows 上,返回值是運行 command 后系統 Shell 返回的值。該 Shell 由 Windows 環(huán)境變量 COMSPEC: 給出:通常是 cmd.exe,它會(huì )返回命令的退出狀態(tài)。在使用非原生 Shell 的系統上,請查閱 Shell 的文檔。

subprocess 模塊提供了更強大的工具來(lái)生成新進(jìn)程并跟蹤執行結果,使用該模塊比使用本函數更好。參閱 subprocess 文檔中的 使用 subprocess 模塊替換舊函數 部分以獲取有用的幫助。

在 Unix 上,waitstatus_to_exitcode() 可以將返回值(即退出狀態(tài))轉換為退出碼。在 Windows 上,返回值就是退出碼。

引發(fā)一個(gè) 審計事件 os.system,附帶參數 command。

可用性: Unix, Windows。

os.times()?

返回當前的全局進(jìn)程時(shí)間。返回值是一個(gè)有 5 個(gè)屬性的對象:

  • user - user time

  • system - system time

  • children_user - user time of all child processes

  • children_system - system time of all child processes

  • elapsed - elapsed real time since a fixed point in the past

For backwards compatibility, this object also behaves like a five-tuple containing user, system, children_user, children_system, and elapsed in that order.

See the Unix manual page times(2) and times(3) manual page on Unix or the GetProcessTimes MSDN on Windows. On Windows, only user and system are known; the other attributes are zero.

可用性: Unix, Windows。

在 3.3 版更改: 返回結果的類(lèi)型由元組變成一個(gè)類(lèi)似元組的對象,同時(shí)具有命名的屬性。

os.wait()?

等待子進(jìn)程執行完畢,返回一個(gè)元組,包含其 pid 和退出狀態(tài)指示:一個(gè) 16 位數字,其低字節是終止該進(jìn)程的信號編號,高字節是退出狀態(tài)碼(信號編號為零的情況下),如果生成了核心文件,則低字節的高位會(huì )置位。

可以使用 waitstatus_to_exitcode() 來(lái)將退出狀態(tài)轉換為退出碼。

可用性: Unix。

參見(jiàn)

waitpid() 可以等待特定的子進(jìn)程執行完畢,且支持更多選項。

os.waitid(idtype, id, options)?

等待一個(gè)或多個(gè)子進(jìn)程執行完畢。idtype 可以是 P_PID, P_PGID, P_ALL, 或 P_PIDFD (Linux 可用)。id 指定要等待的 pid。options 是由 WEXITED、WSTOPPEDWCONTINUED 中的一個(gè)或多個(gè)進(jìn)行或運算構造的,且額外可以與 WNOHANGWNOWAIT 進(jìn)行或運算。返回值是一個(gè)對象,對應著(zhù) siginfo_t 結構體中的數據,即: si_pid, si_uid, si_signo, si_status, si_codeNone (如果指定了 WNOHANG 且沒(méi)有子進(jìn)程處于等待狀態(tài))。

可用性: Unix。

3.3 新版功能.

os.P_PID?
os.P_PGID?
os.P_ALL?

waitid()idtype 參數的可取值。它們影響 id 的解釋方式。

可用性: Unix。

3.3 新版功能.

os.P_PIDFD?

這是僅 Linux 上存在的一種 idtype,它表示 id 是指向一個(gè)進(jìn)程的文件描述符。

可用性: Linux 5.4+

3.9 新版功能.

os.WEXITED?
os.WSTOPPED?
os.WNOWAIT?

用于 waitid()options 參數的標志位,指定要等待的子進(jìn)程信號。

可用性: Unix。

3.3 新版功能.

os.CLD_EXITED?
os.CLD_KILLED?
os.CLD_DUMPED?
os.CLD_TRAPPED?
os.CLD_STOPPED?
os.CLD_CONTINUED?

waitid() 返回的結果中,si_code 的可取值。

可用性: Unix。

3.3 新版功能.

在 3.9 版更改: 添加了 CLD_KILLEDCLD_STOPPED 值。

os.waitpid(pid, options)?

本函數的細節在 Unix 和 Windows 上有不同之處。

在 Unix 上:等待進(jìn)程號為 pid 的子進(jìn)程執行完畢,返回一個(gè)元組,內含其進(jìn)程 ID 和退出狀態(tài)指示(編碼與 wait() 相同)。調用的語(yǔ)義受整數 options 的影響,常規操作下該值應為 0。

如果 pid 大于 0,則 waitpid() 會(huì )獲取該指定進(jìn)程的狀態(tài)信息。如果 pid0,則獲取當前進(jìn)程所在進(jìn)程組中的所有子進(jìn)程的狀態(tài)。如果 pid-1,則獲取當前進(jìn)程的子進(jìn)程狀態(tài)。如果 pid 小于 -1,則獲取進(jìn)程組 -pidpid 的絕對值)中所有進(jìn)程的狀態(tài)。

當系統調用返回 -1 時(shí),將拋出帶有錯誤碼的 OSError 異常。

在 Windows 上:等待句柄為 pid 的進(jìn)程執行完畢,返回一個(gè)元組,內含 pid 以及左移 8 位后的退出狀態(tài)碼(移位簡(jiǎn)化了跨平臺使用本函數)。小于或等于 0pid 在 Windows 上沒(méi)有特殊含義,且會(huì )拋出異常。整數值 options 無(wú)效。pid 可以指向任何 ID 已知的進(jìn)程,不一定是子進(jìn)程。調用 spawn* 函數時(shí)傳入 P_NOWAIT 將返回合適的進(jìn)程句柄。

可以使用 waitstatus_to_exitcode() 來(lái)將退出狀態(tài)轉換為退出碼。

在 3.5 版更改: 如果系統調用被中斷,但信號處理程序沒(méi)有觸發(fā)異常,此函數現在會(huì )重試系統調用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。

os.wait3(options)?

waitpid() 相似,差別在于沒(méi)有進(jìn)程 ID 參數,且返回一個(gè) 3 元組,其中包括子進(jìn)程 ID,退出狀態(tài)指示和資源使用信息。關(guān)于資源使用信息的詳情,請參考 resource.getrusage()。option 參數與傳入 waitpid()wait4() 的相同。

可以使用 waitstatus_to_exitcode() 來(lái)將退出狀態(tài)轉換為退出碼。

可用性: Unix。

os.wait4(pid, options)?

waitpid() 相似,差別在本方法返回一個(gè) 3 元組,其中包括子進(jìn)程 ID,退出狀態(tài)指示和資源使用信息。關(guān)于資源使用信息的詳情,請參考 resource.getrusage()。wait4() 的參數與 waitpid() 的參數相同。

可以使用 waitstatus_to_exitcode() 來(lái)將退出狀態(tài)轉換為退出碼。

可用性: Unix。

os.waitstatus_to_exitcode(status)?

將等待狀態(tài)轉換為退出碼。

在 Unix 上:

  • 如果進(jìn)程正常退出(當 WIFEXITED(status) 為真值),則返回進(jìn)程退出狀態(tài) (返回 WEXITSTATUS(status)): 結果值大于等于 0。

  • 如果進(jìn)程被信號終止(當 WIFSIGNALED(status) 為真值),則返回 -signum 其中 signum 為導致進(jìn)程終止的信號數值 (返回 -WTERMSIG(status)): 結果值小于 0。

  • 否則將拋出 ValueError 異常。

在 Windows 上,返回 status 右移 8 位的結果。

在 Unix 上,如果進(jìn)程正被追蹤或 waitpid() 附帶 WUNTRACED 選項被調用,則調用者必須先檢查 WIFSTOPPED(status) 是否為真值。 如果 WIFSTOPPED(status) 為真值則此函數不可被調用。

3.9 新版功能.

os.WNOHANG?

用于 waitpid() 的選項,如果沒(méi)有立即可用的子進(jìn)程狀態(tài),則立即返回。在這種情況下,函數返回 (0, 0)。

可用性: Unix。

os.WCONTINUED?

被任務(wù)控制 (job control) 停止的子進(jìn)程,如果上次報告狀態(tài)后已恢復運行,則此選項將報告這些子進(jìn)程。

可用性: 部分 Unix 系統。

os.WUNTRACED?

已停止的子進(jìn)程,如果自停止以來(lái)尚未報告其當前狀態(tài),則此選項將報告這些子進(jìn)程。

可用性: Unix。

下列函數采用進(jìn)程狀態(tài)碼作為參數,狀態(tài)碼由 system()、wait()waitpid() 返回。它們可用于確定進(jìn)程上發(fā)生的操作。

os.WCOREDUMP(status)?

如果為該進(jìn)程生成了核心轉儲,返回 True,否則返回 False。

此函數應當僅在 WIFSIGNALED() 為真值時(shí)使用。

可用性: Unix。

os.WIFCONTINUED(status)?

如果一個(gè)已停止的子進(jìn)程通過(guò)傳送 SIGCONT 獲得恢復(如果該進(jìn)程是從任務(wù)控制停止后再繼續的)則返回 True,否則返回 False。

參見(jiàn) WCONTINUED 選項。

可用性: Unix。

os.WIFSTOPPED(status)?

如果進(jìn)程是通過(guò)傳送一個(gè)信號來(lái)停止的則返回 True,否則返回 False。

WIFSTOPPED() 只有在當 waitpid() 調用是通過(guò)使用 WUNTRACED 選項來(lái)完成或者當該進(jìn)程正被追蹤時(shí) (參見(jiàn) ptrace(2)) 才返回 True。

可用性: Unix。

os.WIFSIGNALED(status)?

如果進(jìn)程是通過(guò)一個(gè)信號來(lái)終止的則返回 True ,否則返回 False。

可用性: Unix。

os.WIFEXITED(status)?

如果進(jìn)程正常終止退出則返回 True,也就是說(shuō)通過(guò)調用 exit()_exit(),或者通過(guò)從 main() 返回;在其他情況下則返回 False。

可用性: Unix。

os.WEXITSTATUS(status)?

返回進(jìn)程退出狀態(tài)。

此函數應當僅在 WIFEXITED() 為真值時(shí)使用。

可用性: Unix。

os.WSTOPSIG(status)?

返回導致進(jìn)程停止的信號。

此函數應當僅在 WIFSTOPPED() 為真值時(shí)使用。

可用性: Unix。

os.WTERMSIG(status)?

返回導致進(jìn)程終止的信號的編號。

此函數應當僅在 WIFSIGNALED() 為真值時(shí)使用。

可用性: Unix。

調度器接口?

這些函數控制操作系統如何為進(jìn)程分配 CPU 時(shí)間。 它們僅在某些 Unix 平臺上可用。 更多細節信息請查閱你所用 Unix 的指南頁(yè)面。

3.3 新版功能.

以下調度策略如果被操作系統支持就會(huì )對外公開(kāi)。

os.SCHED_OTHER?

默認調度策略。

os.SCHED_BATCH?

用于 CPU 密集型進(jìn)程的調度策略,它會(huì )盡量為計算機中的其余任務(wù)保留交互性。

os.SCHED_IDLE?

用于極低優(yōu)先級的后臺任務(wù)的調度策略。

os.SCHED_SPORADIC?

用于偶發(fā)型服務(wù)程序的調度策略。

os.SCHED_FIFO?

先進(jìn)先出的調度策略。

os.SCHED_RR?

循環(huán)式的調度策略。

os.SCHED_RESET_ON_FORK?

此旗標可與任何其他調度策略進(jìn)行 OR 運算。 當帶有此旗標的進(jìn)程設置分叉時(shí),其子進(jìn)程的調度策略和優(yōu)先級會(huì )被重置為默認值。

class os.sched_param(sched_priority)?

這個(gè)類(lèi)表示在 sched_setparam(), sched_setscheduler()sched_getparam() 中使用的可修改調度形參。 它屬于不可變對象。

目前它只有一個(gè)可能的形參:

sched_priority?

一個(gè)調度策略的調度優(yōu)先級。

os.sched_get_priority_min(policy)?

獲取 policy 的最低優(yōu)先級數值。 policy 是以上調度策略常量之一。

os.sched_get_priority_max(policy)?

獲取 policy 的最高優(yōu)先級數值。 policy 是以上調度策略常量之一。

os.sched_setscheduler(pid, policy, param)?

設置 PID 為 pid 的進(jìn)程的調度策略。pid 為 0 指的是調用本方法的進(jìn)程。policy 是以上調度策略常量之一。param 是一個(gè) sched_param 實(shí)例。

os.sched_getscheduler(pid)?

返回 PID 為 pid 的進(jìn)程的調度策略。pid 為 0 指的是調用本方法的進(jìn)程。返回的結果是以上調度策略常量之一。

os.sched_setparam(pid, param)?

設置 PID 為 pid 的進(jìn)程的調度參數。 pid 為 0 表示調用方過(guò)程。 param 是一個(gè) sched_param 實(shí)例。

os.sched_getparam(pid)?

返回 PID 為 pid 的進(jìn)程的調度參數為一個(gè) sched_param 實(shí)例。pid 為 0 指的是調用本方法的進(jìn)程。

os.sched_rr_get_interval(pid)?

返回 PID 為 pid 的進(jìn)程在時(shí)間片輪轉調度下的時(shí)間片長(cháng)度(單位為秒)。pid 為 0 指的是調用本方法的進(jìn)程。

os.sched_yield()?

自愿放棄 CPU。

os.sched_setaffinity(pid, mask)?

將 PID 為 pid 的進(jìn)程(為零則為當前進(jìn)程)限制到一組 CPU 上。mask 是整數的可迭代對象,表示應將進(jìn)程限制在其中的一組 CPU。

os.sched_getaffinity(pid)?

返回 PID 為 pid 的進(jìn)程(為零則為當前進(jìn)程)被限制到的那一組 CPU。

其他系統信息?

os.confstr(name)?

返回字符串格式的系統配置信息。name 指定要查找的配置名稱(chēng),它可以是字符串,是一個(gè)系統已定義的名稱(chēng),這些名稱(chēng)定義在不同標準(POSIX,Unix 95,Unix 98 等)中。一些平臺還定義了額外的其他名稱(chēng)。當前操作系統已定義的名稱(chēng)在 confstr_names 字典的鍵中給出。對于未包含在該映射中的配置名稱(chēng),也可以傳遞一個(gè)整數作為 name。

如果 name 指定的配置值未定義,返回 None。

如果 name 是一個(gè)字符串且不是已定義的名稱(chēng),將拋出 ValueError 異常。如果當前系統不支持 name 指定的配置名稱(chēng),即使該名稱(chēng)存在于 confstr_names,也會(huì )拋出 OSError 異常,錯誤碼為 errno.EINVAL。

可用性: Unix。

os.confstr_names?

字典,表示映射關(guān)系,為 confstr() 可接受名稱(chēng)與操作系統為這些名稱(chēng)定義的整數值之間的映射。這可用于判斷系統已定義了哪些名稱(chēng)。

可用性: Unix。

os.cpu_count()?

返回系統的 CPU 數量。不確定則返回 None。

該數量不同于當前進(jìn)程可以使用的CPU數量??捎玫腃PU數量可以由 len(os.sched_getaffinity(0)) 方法獲得。

3.4 新版功能.

os.getloadavg()?

返回系統運行隊列中最近 1、5 和 15 分鐘內的平均進(jìn)程數。無(wú)法獲得平均負載則拋出 OSError 異常。

可用性: Unix。

os.sysconf(name)?

返回整數格式的系統配置信息。如果 name 指定的配置值未定義,返回 -1。對 confstr()name 參數的注釋在此處也適用。當前已知的配置名稱(chēng)在 sysconf_names 字典中提供。

可用性: Unix。

os.sysconf_names?

字典,表示映射關(guān)系,為 sysconf() 可接受名稱(chēng)與操作系統為這些名稱(chēng)定義的整數值之間的映射。這可用于判斷系統已定義了哪些名稱(chēng)。

可用性: Unix。

在 3.11 版更改: Add 'SC_MINSIGSTKSZ' name.

以下數據值用于支持對路徑本身的操作。所有平臺都有定義。

對路徑的高級操作在 os.path 模塊中定義。

os.curdir?

操作系統用來(lái)表示當前目錄的常量字符串。在 Windows 和 POSIX 上是 '.'。在 os.path 中也可用。

os.pardir?

操作系統用來(lái)表示父目錄的常量字符串。在 Windows 和 POSIX 上是 '..'。在 os.path 中也可用。

os.sep?

操作系統用來(lái)分隔路徑不同部分的字符。在 POSIX 上是 '/',在 Windows 上是是 '\\'。注意,僅了解它不足以能解析或連接路徑,請使用 os.path.split()os.path.join(),但它有時(shí)是有用的。在 os.path 中也可用。

os.altsep?

操作系統用來(lái)分隔路徑不同部分的替代字符。如果僅存在一個(gè)分隔符,則為 None。在 sep 是反斜杠的 Windows 系統上,該值被設為 '/'。在 os.path 中也可用。

os.extsep?

分隔基本文件名與擴展名的字符,如 os.py 中的 '.'。在 os.path 中也可用。

os.pathsep?

操作系統通常用于分隔搜索路徑(如 PATH)中不同部分的字符,如 POSIX 上是 ':',Windows 上是 ';'。在 os.path 中也可用。

os.defpath?

在環(huán)境變量沒(méi)有 'PATH' 鍵的情況下,exec*p* and spawn*p* 使用的默認搜索路徑。在 os.path 中也可用。

os.linesep?

當前平臺用于分隔(或終止)行的字符串。它可以是單個(gè)字符,如 POSIX 上是 '\n',也可以是多個(gè)字符,如 Windows 上是 '\r\n'。在寫(xiě)入以文本模式(默認模式)打開(kāi)的文件時(shí),請不要使用 os.linesep 作為行終止符,請在所有平臺上都使用一個(gè) '\n' 代替。

os.devnull?

空設備的文件路徑。如 POSIX 上為 '/dev/null',Windows 上為 'nul'。在 os.path 中也可用。

os.RTLD_LAZY?
os.RTLD_NOW?
os.RTLD_GLOBAL?
os.RTLD_LOCAL?
os.RTLD_NODELETE?
os.RTLD_NOLOAD?
os.RTLD_DEEPBIND?

setdlopenflags()getdlopenflags() 函數所使用的標志。請參閱 Unix 手冊頁(yè) dlopen(3) 獲取不同標志的含義。

3.3 新版功能.

隨機數?

os.getrandom(size, flags=0)?

獲得最多為 size 的隨機字節。本函數返回的字節數可能少于請求的字節數。

這些字節可用于為用戶(hù)空間的隨機數生成器提供種子,或用于加密目的。

getrandom() 依賴(lài)于從設備驅動(dòng)程序和其他環(huán)境噪聲源收集的熵。不必要地讀取大量數據將對使用 /dev/random/dev/urandom 設備的其他用戶(hù)產(chǎn)生負面影響。

flags 參數是一個(gè)位掩碼,可以是零個(gè)或多個(gè)下列值以或運算組合: os.GRND_RANDOMGRND_NONBLOCK。

另請參閱 Linux getrandom() 手冊頁(yè) 。

可用性:Linux 3.17 或更高版本。

3.6 新版功能.

os.urandom(size)?

Return a bytestring of size random bytes suitable for cryptographic use.

本函數從系統指定的隨機源獲取隨機字節。對于加密應用程序,返回的數據應有足夠的不可預測性,盡管其確切的品質(zhì)取決于操作系統的實(shí)現。

在 Linux 上,如果 getrandom() 系統調用可用,它將以阻塞模式使用:阻塞直到系統的 urandom 熵池初始化完畢(內核收集了 128 位熵)。原理請參閱 PEP 524。在 Linux 上,getrandom() 可以以非阻塞模式(使用 GRND_NONBLOCK 標志)獲取隨機字節,或者輪詢(xún)直到系統的 urandom 熵池初始化完畢。

在類(lèi) Unix 系統上,隨機字節是從 /dev/urandom 設備讀取的。如果 /dev/urandom 設備不可用或不可讀,則拋出 NotImplementedError 異常。

On Windows, it will use BCryptGenRandom().

參見(jiàn)

secrets 模塊提供了更高級的功能。所在平臺會(huì )提供隨機數生成器,有關(guān)其易于使用的接口,請參閱 random.SystemRandom。

在 3.6.0 版更改: 在 Linux 上,getrandom() 現在以阻塞模式使用,以提高安全性。

在 3.5.2 版更改: 在 Linux 上,如果 getrandom() 系統調用阻塞(urandom 熵池尚未初始化完畢),則退回一步讀取 /dev/urandom。

在 3.5 版更改: 在 Linux 3.17 和更高版本上,現在使用 getrandom() 系統調用(如果可用)。在 OpenBSD 5.6 和更高版本上,現在使用 getentropy() C 函數。這些函數避免了使用內部文件描述符。

在 3.11 版更改: On Windows, BCryptGenRandom() is used instead of CryptGenRandom() which is deprecated.

os.GRND_NONBLOCK?

默認情況下,從 /dev/random 讀取時(shí),如果沒(méi)有可用的隨機字節,則 getrandom() 會(huì )阻塞;從 /dev/urandom 讀取時(shí),如果熵池尚未初始化,則會(huì )阻塞。

如果設置了 GRND_NONBLOCK 標志,則這些情況下 getrandom() 不會(huì )阻塞,而是立即拋出 BlockingIOError 異常。

3.6 新版功能.

os.GRND_RANDOM?

如果設置了此標志位,那么將從 /dev/random 池而不是 /dev/urandom 池中提取隨機字節。

3.6 新版功能.