av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)Python教程:os —- 多種操作系統(tǒng)接口

os —- 多種操作系統(tǒng)接口

源代碼: Lib/os.py


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

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

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

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

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

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

  • On WebAssembly platforms wasm32-emscripten and wasm32-wasi, large parts of the os module are not available or behave differently. API related to processes (e.g. fork(), execve()), signals (e.g. kill(), wait()), and resources (e.g. nice()) are not available. Others like getuid() and getpid() are emulated or stubs.

備注

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

exception os.error

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

os.name

導(dǎo)入的依賴特定操作系統(tǒng)的模塊的名稱。以下名稱目前已注冊: 'posix', 'nt', 'java'.

參見

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

platform 模塊對系統(tǒng)的標(biāo)識有更詳細(xì)的檢查。

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

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

filesystem encoding and error handler 是在 Python 啟動時通過 PyConfig_Read() 函數(shù)來配置的:請參閱 PyConfig 的 filesystem_encoding 和 filesystem_errors 等成員。

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

文件系統(tǒng)編碼器 必須保證能成功解碼所有 128 以內(nèi)的字節(jié)。如果不能保證,API 函數(shù)可能觸發(fā) UnicodeError 。

另請參見 locale encoding。

Python UTF-8 模式

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

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

  • 用 UTF-8 作為 文件系統(tǒng)編碼。

  • sys.getfilesystemencoding() returns 'utf-8'.

  • locale.getpreferredencoding() returns 'utf-8' (the do_setlocale argument has no effect).

  • sys.stdin, sys.stdout 和 sys.stderr 都將 UTF-8 用作它們的文本編碼,并且為 sys.stdin 和 sys.stdout 啟用 surrogateescape 錯誤處理句柄 (sys.stderr 會繼續(xù)使用 backslashreplace 如同在默認(rèn)的局部感知模式下一樣)

  • On Unix, os.device_encoding() returns 'utf-8' rather than the device encoding.

請注意 UTF-8 模式下的標(biāo)準(zhǔn)流設(shè)置可以被 PYTHONIOENCODING 所覆蓋(在默認(rèn)的區(qū)域感知模式下也同樣如此)。

作為低層級 API 發(fā)生改變的結(jié)果,其他高層級 API 也會表現(xiàn)出不同的默認(rèn)行為:

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

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

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

如果在 Python 啟動時 LC_CTYPE 區(qū)域設(shè)為 CPOSIX ,則啟用 Python UTF-8 模式 (參見 PyConfig_Read() 函數(shù))。

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

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

Python UTF-8 模式只能在 Python 啟動時啟用。其值可以從 sys.flags.utf8_mode 讀取。

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

參見

PEP 686

Python 3.15 will make Python UTF-8 模式 default.

進(jìn)程參數(shù)

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

os.ctermid()

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

Availability: Unix, not Emscripten, not WASI.

os.environ

一個 mapping 對象,其中鍵值是代表進(jìn)程環(huán)境的字符串。 例如,environ['HOME'] 是你的主目錄(在某些平臺上)的路徑名,相當(dāng)于 C 中的 getenv("HOME")。

這個映射是在第一次導(dǎo)入 os 模塊時捕獲的,通常作為 Python 啟動時處理 site.py 的一部分。除了通過直接修改 os.environ 之外,在此之后對環(huán)境所做的更改不會反映在 os.environ 中。

該映射除了可以用于查詢環(huán)境外,還能用于修改環(huán)境。當(dāng)該映射被修改時,將自動調(diào)用 putenv()。

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

備注

直接調(diào)用 putenv() 并不會影響 os.environ ,所以推薦直接修改 os.environ 。

備注

在某些平臺上,包括 FreeBSD 和 macOS,設(shè)置 environ 可能導(dǎo)致內(nèi)存泄漏。 請參閱 putenv() 的系統(tǒng)文檔。

可以刪除映射中的元素來刪除對應(yīng)的環(huán)境變量。當(dāng)從 os.environ 刪除元素時,以及調(diào)用 pop()clear() 之一時,將自動調(diào)用 unsetenv()。

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

os.environb

environ 的字節(jié)版本:一個 mapping 對象,其中鍵值都是 bytes 對象,代表進(jìn)程環(huán)境。 environ 和 environb 是同步的(修改 environb 會更新 environ,反之亦然)。

只有在 supports_bytes_environ 為 True 的時候 environb 才是可用的。

3.2 新版功能.

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

os.chdir(path)

os.fchdir(fd)

os.getcwd()

以上函數(shù)請參閱 文件和目錄 。

os.fsencode(filename)

將 類似路徑形式的 filename 編碼為 filesystem encoding and error handler;原樣返回 bytes。

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

3.2 新版功能.

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

os.fsdecode(filename)

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

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

3.2 新版功能.

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

os.fspath(path)

返回路徑的文件系統(tǒng)表示。

如果傳入的是 str 或 bytes 類型的字符串,將原樣返回。否則 __fspath__() 將被調(diào)用,如果得到的是一個 str 或 bytes 類型的對象,那就返回這個值。其他所有情況則會拋出 TypeError 異常。

3.6 新版功能.

class os.PathLike

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

3.6 新版功能.

  • abstractmethod __fspath__()

    返回當(dāng)前對象的文件系統(tǒng)表示。

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

os.getenv(key, default=None)

Return the value of the environment variable key as a string if it exists, or default if it doesn’t. key is a string. 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系統(tǒng)上,鍵和值會使用 sys.getfilesystemencoding() 和``‘surrogateescape’`` 錯誤處理進(jìn)行解碼。如果你想使用其他的編碼,使用 os.getenvb()。

可用性: Unix, Windows。

os.getenvb(key, default=None)

Return the value of the environment variable key as bytes if it exists, or default if it doesn’t. key must be 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_environ 為 True 時可用。

可用性: Unix。

3.2 新版功能.

os.get_exec_path(env=None)

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

3.2 新版功能.

os.getegid()

返回當(dāng)前進(jìn)程的有效組ID。對應(yīng)當(dāng)前進(jìn)程執(zhí)行文件的 “set id” 位。

Availability: Unix, not Emscripten, not WASI.

os.geteuid()

返回當(dāng)前進(jìn)程的有效用戶ID。

Availability: Unix, not Emscripten, not WASI.

os.getgid()

返回當(dāng)前進(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.

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能.

os.getgroups()

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

Availability: Unix, not Emscripten, not WASI.

備注

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

os.getlogin()

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

Availability: Unix, Windows, not Emscripten, not WASI.

os.getpgid(pid)

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

Availability: Unix, not Emscripten, not WASI.

os.getpgrp()

返回當(dāng)時進(jìn)程組的ID

Availability: Unix, not Emscripten, not WASI.

os.getpid()

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

The function is a stub on Emscripten and WASI, see WebAssembly platforms for more information.

os.getppid()

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

Availability: Unix, Windows, not Emscripten, not WASI.

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

os.getpriority(which, who)

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

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能.

os.PRIO_PROCESS

os.PRIO_PGRP

os.PRIO_USER

函數(shù) getpriority() 和 setpriority() 的參數(shù)。

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能.

os.getresuid()

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

Availability: Unix, not Emscripten, not WASI.

3.2 新版功能.

os.getresgid()

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

Availability: Unix, not Emscripten, not WASI.

3.2 新版功能.

os.getuid()

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

可用性: Unix。

os.initgroups(username, gid, /)

調(diào)用系統(tǒng) initgroups(),使用指定用戶所在的所有值來初始化組訪問列表,包括指定的組ID。

Availability: Unix, not Emscripten, not WASI.

3.2 新版功能.

os.putenv(key, value, /)

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

對 os.environ 中的項目的賦值會自動轉(zhuǎn)化為對 putenv() 的相應(yīng)調(diào)用;然而,對 putenv() 的調(diào)用并不更新 os.environ ,所以實(shí)際上最好是賦值到 os.environ 的項目。這也適用于 getenv() 和 getenvb() ,它們分別使用 os.environ 和 os.environb 在它們的實(shí)現(xiàn)中。

備注

在某些平臺上,包括 FreeBSD 和 macOS,設(shè)置 environ 可能導(dǎo)致內(nèi)存泄漏。 請參閱 putenv() 的系統(tǒng)文檔。

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

在 3.9 版更改: 該函數(shù)現(xiàn)在總是可用。

os.setegid(egid, /)

設(shè)置當(dāng)前進(jìn)程的有效組ID。

Availability: Unix, not Emscripten, not WASI.

os.seteuid(euid, /)

設(shè)置當(dāng)前進(jìn)程的有效用戶ID。

Availability: Unix, not Emscripten, not WASI.

os.setgid(gid, /)

設(shè)置當(dāng)前進(jìn)程的組ID。

Availability: Unix, not Emscripten, not WASI.

os.setgroups(groups, /)

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

Availability: Unix, not Emscripten, not WASI.

備注

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

os.setpgrp()

根據(jù)已實(shí)現(xiàn)的版本(如果有)來調(diào)用系統(tǒng) setpgrp()setpgrp(0, 0) 。相關(guān)說明,請參考 Unix 手冊。

Availability: Unix, not Emscripten, not WASI.

os.setpgid(pid, pgrp, /)

使用系統(tǒng)調(diào)用 setpgid(),將 pid 對應(yīng)進(jìn)程的組ID設(shè)置為 pgrp。相關(guān)說明,請參考 Unix 手冊。

Availability: Unix, not Emscripten, not WASI.

os.setpriority(which, who, priority)

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

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能.

os.setregid(rgid, egid, /)

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

Availability: Unix, not Emscripten, not WASI.

os.setresgid(rgid, egid, sgid, /)

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

Availability: Unix, not Emscripten, not WASI.

3.2 新版功能.

os.setresuid(ruid, euid, suid, /)

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

Availability: Unix, not Emscripten, not WASI.

3.2 新版功能.

os.setreuid(ruid, euid, /)

設(shè)置當(dāng)前進(jìn)程的真實(shí)和有效用戶ID。

Availability: Unix, not Emscripten, not WASI.

os.getsid(pid, /)

調(diào)用系統(tǒng)調(diào)用 getsid()。相關(guān)說明,請參考 Unix 手冊。

Availability: Unix, not Emscripten, not WASI.

os.setsid()

使用系統(tǒng)調(diào)用 getsid()。相關(guān)說明,請參考 Unix 手冊。

Availability: Unix, not Emscripten, not WASI.

os.setuid(uid, /)

設(shè)置當(dāng)前進(jìn)程的用戶ID。

Availability: Unix, not Emscripten, not WASI.

os.strerror(code, /)

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

os.supports_bytes_environ

如果操作系統(tǒng)上原生環(huán)境類型是字節(jié)型則為 True (例如在 Windows 上為 False)。

3.2 新版功能.

os.umask(mask, /)

設(shè)定當(dāng)前數(shù)值掩碼并返回之前的掩碼。

The function is a stub on Emscripten and WASI, see WebAssembly platforms for more information.

os.uname()

返回當(dāng)前操作系統(tǒng)的識別信息。返回值是一個有5個屬性的對象:

  • sysname - 操作系統(tǒng)名

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

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

  • version - 操作系統(tǒng)版本信息

  • machine - 硬件標(biāo)識符

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

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

可用性: Unix。

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

os.unsetenv(key, /)

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

刪除 os.environ 中的項目會自動轉(zhuǎn)化為對 unsetenv() 的相應(yīng)調(diào)用;然而,對 unsetenv() 的調(diào)用并不更新 os.environ ,所以實(shí)際上最好是刪除 os.environ 的項目。

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

在 3.9 版更改: 該函數(shù)現(xiàn)在總是可用,并且在 Windows 上也可用。

創(chuàng)建文件對象

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

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

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

文件描述符操作

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

文件描述符是一些小的整數(shù),對應(yīng)于當(dāng)前進(jìn)程所打開的文件。例如,標(biāo)準(zhǔn)輸入的文件描述符通常是0,標(biāo)準(zhǔn)輸出是1,標(biāo)準(zhǔn)錯誤是2。之后被進(jìn)程打開的文件的文件描述符會被依次指定為3,4,5等。“文件描述符”這個詞有點(diǎn)誤導(dǎo)性,在 Unix 平臺中套接字和管道也被文件描述符所引用。

當(dāng)需要時,可以用 fileno() 可以獲得 file object 所對應(yīng)的文件描述符。需要注意的是,直接使用文件描述符會繞過文件對象的方法,會忽略如數(shù)據(jù)內(nèi)部緩沖等情況。

os.close(fd)

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

備注

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

os.closerange(fd_low, fd_high, /)

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

 
 
 
 
  1. for fd in range(fd_low, fd_high):
  2. try:
  3. os.close(fd)
  4. except OSError:
  5. pass

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

從文件描述符 src 復(fù)制 count 字節(jié),從偏移量 offset_src 開始讀取,到文件描述符 dst,從偏移量 offset_dst 開始寫入。如果 offset_src 為 None,則 src 將從當(dāng)前位置開始讀取;offset_dst 同理。srcdst 指向的文件必須處于相同的文件系統(tǒng),否則將會拋出一個 errno 被設(shè)為 errno.EXDEV 的 OSError 。

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

返回值是復(fù)制的字節(jié)的數(shù)目。這可能低于需求的數(shù)目。

Availability: Linux >= 4.5 with glibc >= 2.27.

3.8 新版功能.

os.device_encoding(fd)

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

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

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

os.dup(fd, /)

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

在 Windows 中,當(dāng)復(fù)制一個標(biāo)準(zhǔn)流(0: stdin, 1: stdout, 2: stderr)時,新的文件描述符是 可繼承的。

Availability: not WASI.

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

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

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

Availability: not WASI.

在 3.4 版更改: 添加可選參數(shù) inheritable。

在 3.7 版更改: 成功時返回 fd2,以過去的版本中,總是返回 None。

os.fchmod(fd, mode)

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

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

可用性: Unix。

os.fchown(fd, uid, gid)

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

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

可用性: Unix。

os.fdatasync(fd)

強(qiáng)制將文件描述符 fd 指定文件寫入磁盤。不強(qiáng)制更新元數(shù)據(jù)。

可用性: Unix。

備注

該功能在 MacOS 中不可用。

os.fpathconf(fd, name, /)

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

如果 name 是一個字符串且不是已定義的名稱,將拋出 ValueError 異常。如果當(dāng)前系統(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)

強(qiáng)制將文件描述符 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 指向的文件,以使其最大為 length 字節(jié)。從 Python 3.3 開始,它等效于 os.truncate(fd, length)。

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

可用性: Unix, Windows。

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

os.get_blocking(fd, /)

獲取文件描述符的阻塞模式:如果設(shè)置了 O_NONBLOCK 標(biāo)志位,返回 False,如果該標(biāo)志位被清除,返回 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 指定要進(jìn)行的操作,它們是 F_LOCK、F_TLOCK、F_ULOCK 或 F_TEST 中的一個。len 指定哪部分文件需要鎖定。

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

可用性: Unix。

3.3 新版功能.

os.F_LOCK

os.F_TLOCK

os.F_ULOCK

os.F_TEST

標(biāo)志位,用于指定 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.

Availability: Unix, not Emscripten, not WASI.

3.11 新版功能.

os.lseek(fd, pos, how, /)

將文件描述符 fd 的當(dāng)前位置設(shè)置為 pos,位置的計算方式 how 如下:設(shè)置為 SEEK_SET 或 0 表示從文件開頭計算,設(shè)置為 SEEK_CUR 或 1 表示從文件當(dāng)前位置計算,設(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_HOLEos.SEEK_DATA。

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

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

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

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

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

在 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ù)的選項??梢杂冒次换蜻\(yùn)算符 | 將它們組合使用。部分常量并非在所有平臺上都可用。有關(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_EVTONLY

os.O_FSYNC

os.O_SYMLINK

os.O_NOFOLLOW_ANY

以上常量僅適用于 macOS。

在 3.10 版更改: 加入 O_EVTONLY 、 O_FSYNC 、 O_SYMLINK 和 O_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

上述常量是擴(kuò)展常量,如果 C 庫未定義它們,則不存在。

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

os.openpty()

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

Availability: Unix, not Emscripten, not WASI.

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

os.pipe()

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

可用性: Unix, Windows。

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

os.pipe2(flags, /)

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

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能.

os.posix_fallocate(fd, offset, len, /)

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

Availability: Unix, not Emscripten.

3.3 新版功能.

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

聲明即將以特定模式訪問數(shù)據(jù),使內(nèi)核可以提前進(jìn)行優(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ù)的標(biāo)志位,指定可能使用的訪問模式。

可用性: Unix。

3.3 新版功能.

os.pread(fd, n, offset, /)

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

返回所讀取字節(jié)的字節(jié)串 (bytestring)。如果到達(dá)了 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ù)可以由零個或多個標(biāo)志位進(jìn)行按位或運(yùn)算來得到:

  • RWF_HIPRI

  • RWF_NOWAIT

返回實(shí)際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對象的總?cè)萘俊?/p>

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

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

Availability: Linux >= 2.6.30, FreeBSD >= 6.0, OpenBSD >= 2.7, AIX >= 7.1.

Using flags requires Linux >= 4.6.

3.7 新版功能.

os.RWF_NOWAIT

不要等待無法立即獲得的數(shù)據(jù)。如果指定了此標(biāo)志,那么當(dāng)需要從后備存儲器中讀取數(shù)據(jù),或等待文件鎖時,系統(tǒng)調(diào)用將立即返回。

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

Availability: Linux >= 4.14.

3.7 新版功能.

os.RWF_HIPRI

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

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

Availability: Linux >= 4.6.

3.7 新版功能.

os.pwrite(fd, str, offset, /)

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

返回實(shí)際寫入的字節(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ù)可以由零個或多個標(biāo)志位進(jìn)行按位或運(yùn)算來得到:

  • RWF_DSYNC

  • RWF_SYNC

  • RWF_APPEND

返回實(shí)際寫入的字節(jié)總數(shù)。

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

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

Availability: Linux >= 2.6.30, FreeBSD >= 6.0, OpenBSD >= 2.7, AIX >= 7.1.

Using flags requires Linux >= 4.6.

3.7 新版功能.

os.RWF_DSYNC

提供預(yù)寫功能,等效于帶 O_DSYNC 標(biāo)志的 os.open() 。本標(biāo)志只作用于通過系統(tǒng)調(diào)用寫入的數(shù)據(jù)。

Availability: Linux >= 4.7.

3.7 新版功能.

os.RWF_SYNC

提供預(yù)寫功能,等效于帶 O_SYNC 標(biāo)志的 os.open() 。本標(biāo)志只作用于通過系統(tǒng)調(diào)用寫入的數(shù)據(jù)。

Availability: Linux >= 4.7.

3.7 新版功能.

os.RWF_APPEND

提供預(yù)寫功能,等效于帶 O_APPEND 標(biāo)志的 os.open() 。本標(biāo)志只對 os.pwritev() 有意義,只作用于通過系統(tǒng)調(diào)用寫入的數(shù)據(jù)。參數(shù) offset 對寫入操作無效;數(shù)據(jù)總是會添加到文件的末尾。但如果 offset 參數(shù)為 -1,則會刷新當(dāng)前文件的 offset 。

Availability: Linux >= 4.16.

3.10 新版功能.

os.read(fd, n, /)

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

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

備注

該功能適用于低級 I/O 操作,必須用于 os.open() 或 pipe() 返回的文件描述符。若要讀取由內(nèi)建函數(shù) open()、popen()、fdopen() 或 sys.stdin 返回的 “文件對象”,則應(yīng)使用其相應(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_fd, in_fd, offset, count)

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

將文件描述符 in_fd 中的 count 字節(jié)復(fù)制到文件描述符 out_fd 的偏移位置 offset 處。返回復(fù)制的字節(jié)數(shù),如果到達(dá) EOF,返回 0

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

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

第二種情況可以被用于 macOS 和 FreeBSD,其中 headerstrailers 是任意的緩沖區(qū)序列,它們會在寫入來自 in_fd 的數(shù)據(jù)之前被寫入。 它的返回內(nèi)容與第一種情況相同。

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

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

跨平臺應(yīng)用程序不應(yīng)使用 headers、trailersflags 參數(shù)。

Availability: Unix, not Emscripten, not WASI.

備注

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

3.3 新版功能.

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

os.set_blocking(fd, blocking, /)

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

參見 get_blocking() 和 socket.socket.setblocking()。

可用性: Unix。

3.5 新版功能.

os.SF_NODISKIO

os.SF_MNOWAIT

os.SF_SYNC

sendfile() 函數(shù)的參數(shù)(假設(shè)當(dāng)前實(shí)現(xiàn)支持這些參數(shù))。

Availability: Unix, not Emscripten, not WASI.

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.

Availability: Unix, not Emscripten, not WASI.

3.11 新版功能.

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

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

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

調(diào)用成功后,返回拼接到管道的字節(jié)數(shù)或從管道拼接出來的字節(jié)數(shù)。返回值為 0 意味著輸入結(jié)束。如果 src 指向一個管道,則意味著沒有數(shù)據(jù)需要傳輸,而且由于沒有寫入程序連到管道的寫入端,所以將不會阻塞。

Availability: Linux >= 2.6.17 with glibc >= 2.5

3.10 新版功能.

os.SPLICE_F_MOVE

os.SPLICE_F_NONBLOCK

os.SPLICE_F_MORE

3.10 新版功能.

os.readv(fd, buffers, /)

從文件描述符 fd 將數(shù)據(jù)讀取至多個可變的 字節(jié)類對象 緩沖區(qū) buffers 中。將數(shù)據(jù)依次存放到每個緩沖區(qū)中,填滿一個后繼續(xù)存放到序列中的下一個緩沖區(qū),來保存其余數(shù)據(jù)。

返回實(shí)際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對象的總?cè)萘俊?/p>

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

可用性: Unix。

3.3 新版功能.

os.tcgetpgrp(fd, /)

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

Availability: Unix, not WASI.

os.tcsetpgrp(fd, pg, /)

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

Availability: Unix, not WASI.

os.ttyname(fd, /)

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

可用性: Unix。

os.write(fd, str, /)

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

返回實(shí)際寫入的字節(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ù)。

返回實(shí)際寫入的字節(jié)總數(shù)。

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

可用性: Unix。

3.3 新版功能.

查詢終端的尺寸

3.3 新版功能.

os.get_terminal_size(fd=STDOUT_FILENO, /)

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

可選參數(shù) fd (默認(rèn)為 STDOUT_FILENO 或標(biāo)準(zhǔn)輸出)指定應(yīng)查詢的文件描述符。

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

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

可用性: Unix, Windows。

class os.terminal_size

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

  • columns

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

  • lines

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

文件描述符的繼承

3.4 新版功能.

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

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

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

On WebAssembly platforms wasm32-emscripten and wasm32-wasi, the file descriptor cannot be modified.

os.get_inheritable(fd, /)

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

os.set_inheritable(fd, inheritable, /)

設(shè)置指定文件描述符的“可繼承”標(biāo)志位。

os.get_handle_inheritable(handle, /)

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

可用性: Windows。

os.set_handle_inheritable(handle, inheritable, /)

設(shè)置指定句柄的“可繼承”標(biāo)志位。

可用性: Windows。

文件和目錄

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

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

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

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

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

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

  • 不跟蹤符號鏈接: 如果 follow_symlinksFalse,并且待操作路徑的最后一個元素是符號鏈接,則該函數(shù)將在符號鏈接本身而不是鏈接所指向的文件上操作。(對于 POSIX 系統(tǒng),Python 將調(diào)用該函數(shù)的 l... 變體。)

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

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

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

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

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

備注

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

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

最好寫成:

 
 
 
 
  1. try:
  2. fp = open("myfile")
  3. except PermissionError:
  4. return "some default data"
  5. else:
  6. with fp:
  7. return fp.read()

備注

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

在 3.3 版更改: 添加 dir_fd、effective_idsfollow_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)

將當(dāng)前工作目錄更改為 path。

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

本函數(shù)可以拋出 OSError 及其子類的異常,如 FileNotFoundError、PermissionError 和 NotADirectoryError 異常。

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

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

在 3.6 版更改: 接受一個 path-like object。

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

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

  • stat.UF_NODUMP

  • stat.UF_IMMUTABLE

  • stat.UF_APPEND

  • stat.UF_OPAQUE

  • stat.UF_NOUNLINK

  • stat.UF_COMPRESSED

  • stat.UF_HIDDEN

  • stat.SF_ARCHIVED

  • stat.SF_IMMUTABLE

  • stat.SF_APPEND

  • stat.SF_NOUNLINK

  • stat.SF_SNAPSHOT

本函數(shù)支持 不跟蹤符號鏈接。

引發(fā)一個 審計事件 os.chflags,附帶參數(shù) pathflags。

Availability: Unix, not Emscripten, not WASI.

3.3 新版功能: follow_symlinks 參數(shù)。

在 3.6 版更改: 接受一個 path-like object。

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

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

  • stat.S_ISUID

  • stat.S_ISGID

  • stat.S_ENFMT

  • stat.S_ISVTX

  • stat.S_IREAD

  • stat.S_IWRITE

  • stat.S_IEXEC

  • stat.S_IRWXU

  • stat.S_IRUSR

  • stat.S_IWUSR

  • stat.S_IXUSR

  • stat.S_IRWXG

  • stat.S_IRGRP

  • stat.S_IWGRP

  • stat.S_IXGRP

  • stat.S_IRWXO

  • stat.S_IROTH

  • stat.S_IWOTH

  • stat.S_IXOTH

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

備注

盡管 Windows 支持 chmod(),但只能用它設(shè)置文件的只讀標(biāo)志(stat.S_IWRITEstat.S_IREAD 常量或?qū)?yīng)的整數(shù)值)。所有其他標(biāo)志位都會被忽略。

The function is limited on Emscripten and WASI, see WebAssembly platforms for more information.

引發(fā)一個 審計事件 os.chmod,附帶參數(shù) pathmode、dir_fd。

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

在 3.6 版更改: 接受一個 path-like object。

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

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

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

參見更高階的函數(shù) shutil.chown(),除了數(shù)字 ID 之外,它也接受名稱。

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

可用性: Unix。

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

在 3.6 版更改: 支持 類路徑對象。

os.chroot(path)

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

Availability: Unix, not Emscripten, not WASI.

在 3.6 版更改: 接受一個 path-like object。

os.fchdir(fd)

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

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

可用性: Unix。

os.getcwd()

返回表示當(dāng)前工作目錄的字符串。

os.getcwdb()

返回表示當(dāng)前工作目錄的字節(jié)串 (bytestring)。

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

os.lchflags(path, flags)

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

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

Availability: Unix, not Emscripten, not WASI.

在 3.6 版更改: 接受一個 path-like object。

os.lchmod(path, mode)

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

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

可用性: Unix。

在 3.6 版更改: 接受一個 path-like object。

os.lchown(path, uid, gid)

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

引發(fā)一個 審計事件 os.chown,附帶參數(shù) pathuidgid、dir_fd。

可用性: 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_fddst_dir_fd 中的一個或兩個指定為 基于目錄描述符的相對路徑,支持 不跟蹤符號鏈接。

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

可用性: Unix, Windows。

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

3.3 新版功能: 添加 src_dir_fd、dst_dir_fdfollow_symlinks 參數(shù)。

在 3.6 版更改: 接受一個 類路徑對象 作為 srcdst

os.listdir(path=’.’)

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

path 可以是 類路徑對象。
本文名稱:創(chuàng)新互聯(lián)Python教程:os —- 多種操作系統(tǒng)接口
文章路徑:http://uogjgqi.cn/article/djscpgh.html

掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流