新聞中心
os —- 多種操作系統(tǒng)接口
源代碼: Lib/os.py

本模塊提供了一種使用與操作系統(tǒng)相關(guān)的功能的便捷式途徑。 如果你只是想讀寫(xiě)一個(gè)文件,請(qǐng)參閱 open(),如果你想操作文件路徑,請(qǐng)參閱 os.path 模塊,如果你想讀取通過(guò)命令行給出的所有文件中的所有行,請(qǐng)參閱 fileinput 模塊。 為了創(chuàng)建臨時(shí)文件和目錄,請(qǐng)參閱 tempfile 模塊,對(duì)于高級(jí)文件和目錄處理,請(qǐng)參閱 shutil 模塊。
關(guān)于這些函數(shù)的適用性的說(shuō)明:
python中所有依賴(lài)于操作系統(tǒng)的內(nèi)置模塊的設(shè)計(jì)都是這樣,只要不同的操作系統(tǒng)某一相同的功能可用,它就使用相同的接口。例如,函數(shù)
os.stat(path)以相同的格式返回關(guān)于 path 的狀態(tài)信息(該格式源于 POSIX 接口)。特定于某一操作系統(tǒng)的擴(kuò)展通過(guò)操作 os 模塊也是可用的,但是使用它們當(dāng)然是對(duì)可移植性的一種威脅。
所有接受路徑或文件名的函數(shù)都同時(shí)支持字節(jié)串和字符串對(duì)象,并在返回路徑或文件名時(shí)使用相應(yīng)類(lèi)型的對(duì)象作為結(jié)果。
在 VxWorks 系統(tǒng)上,os.popen, os.fork, os.execv 和 os.spawn*p* 都未支持。
On WebAssembly platforms
wasm32-emscriptenandwasm32-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.
備注
如果使用無(wú)效或無(wú)法訪(fǎng)問(wèn)的文件名與路徑,或者其他類(lèi)型正確但操作系統(tǒng)不接受的參數(shù),此模塊的所有函數(shù)都拋出 OSError (或者它的子類(lèi))。
exception os.error
內(nèi)建的 OSError 異常的一個(gè)別名。
os.name
導(dǎo)入的依賴(lài)特定操作系統(tǒng)的模塊的名稱(chēng)。以下名稱(chēng)目前已注冊(cè): 'posix', 'nt', 'java'.
參見(jiàn)
sys.platform 有更詳細(xì)的描述. os.uname() 只給出系統(tǒng)提供的版本信息。
platform 模塊對(duì)系統(tǒng)的標(biāo)識(shí)有更詳細(xì)的檢查。
文件名,命令行參數(shù),以及環(huán)境變量。
在 Python 中,使用字符串類(lèi)型表示文件名、命令行參數(shù)和環(huán)境變量。 在某些系統(tǒng)上,在將這些字符串傳遞給操作系統(tǒng)之前,必須將這些字符串解碼為字節(jié)。 Python 使用 filesystem encoding and error handler 來(lái)執(zhí)行此轉(zhuǎn)換(請(qǐng)參閱 sys.getfilesystemencoding() )。
filesystem encoding and error handler 是在 Python 啟動(dòng)時(shí)通過(guò) PyConfig_Read() 函數(shù)來(lái)配置的:請(qǐng)參閱 PyConfig 的 filesystem_encoding 和 filesystem_errors 等成員。
在 3.1 版更改: 在某些系統(tǒng)上,使用文件系統(tǒng)編碼進(jìn)行轉(zhuǎn)換可能會(huì)失敗。 在這種情況下,Python 會(huì)使用 代理轉(zhuǎn)義編碼錯(cuò)誤處理器,這意味著在解碼時(shí),不可解碼的字節(jié)被 Unicode 字符 U+DCxx 替換,并且這些字節(jié)在編碼時(shí)再次轉(zhuǎn)換為原始字節(jié)。
文件系統(tǒng)編碼器 必須保證能成功解碼所有 128 以?xún)?nèi)的字節(jié)。如果不能保證,API 函數(shù)可能觸發(fā) UnicodeError 。
另請(qǐng)參見(jiàn) locale encoding。
Python UTF-8 模式
3.7 新版功能: 有關(guān)更多詳細(xì)信息,請(qǐng)參閱 PEP 540 。
Python UTF-8 模式會(huì)忽略 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錯(cuò)誤處理句柄 (sys.stderr 會(huì)繼續(xù)使用backslashreplace如同在默認(rèn)的局部感知模式下一樣)On Unix, os.device_encoding() returns
'utf-8'rather than the device encoding.
請(qǐng)注意 UTF-8 模式下的標(biāo)準(zhǔn)流設(shè)置可以被 PYTHONIOENCODING 所覆蓋(在默認(rèn)的區(qū)域感知模式下也同樣如此)。
作為低層級(jí) API 發(fā)生改變的結(jié)果,其他高層級(jí) API 也會(huì)表現(xiàn)出不同的默認(rèn)行為:
命令行參數(shù),環(huán)境變量和文件名會(huì)使用 UTF-8 編碼來(lái)解碼為文本。
os.fsdecode() 和 os.fsencode() 會(huì)使用 UTF-8 編碼。
open(), io.open() 和 codecs.open() 默認(rèn)會(huì)使用 UTF-8 編碼。 但是,它們默認(rèn)仍將使用嚴(yán)格錯(cuò)誤處理句柄,因此試圖在文本模式下打開(kāi)二進(jìn)制文件將可能引發(fā)異常,而不是生成無(wú)意義的數(shù)據(jù)。
如果在 Python 啟動(dòng)時(shí) LC_CTYPE 區(qū)域設(shè)為 C 或 POSIX ,則啟用 Python UTF-8 模式 (參見(jiàn) PyConfig_Read() 函數(shù))。
它可以通過(guò)命令行選項(xiàng) -X utf8 和環(huán)境變量 PYTHONUTF8,來(lái)啟用或禁用。
如果沒(méi)有設(shè)置 PYTHONUTF8 環(huán)境變量,那么解釋器默認(rèn)使用當(dāng)前的地區(qū)設(shè)置,除非 當(dāng)前地區(qū)識(shí)別為基于 ASCII 的傳統(tǒng)地區(qū)(如 PYTHONCOERCECLOCALE 所述),并且 locale coercion 被禁用或失敗。在這種傳統(tǒng)地區(qū),除非顯式指明不要如此,解釋器將默認(rèn)啟用 UTF-8 模式。
Python UTF-8 模式只能在 Python 啟動(dòng)時(shí)啟用。其值可以從 sys.flags.utf8_mode 讀取。
另請(qǐng)參閱 在 Windows 中的 UTF-8 模式 和 filesystem encoding and error handler。
參見(jiàn)
PEP 686
Python 3.15 will make Python UTF-8 模式 default.
進(jìn)程參數(shù)
這些函數(shù)和數(shù)據(jù)項(xiàng)提供了操作當(dāng)前進(jìn)程和用戶(hù)的信息。
os.ctermid()
返回與進(jìn)程控制終端對(duì)應(yīng)的文件名。
Availability: Unix, not Emscripten, not WASI.
os.environ
一個(gè) mapping 對(duì)象,其中鍵值是代表進(jìn)程環(huán)境的字符串。 例如,environ['HOME'] 是你的主目錄(在某些平臺(tái)上)的路徑名,相當(dāng)于 C 中的 getenv("HOME")。
這個(gè)映射是在第一次導(dǎo)入 os 模塊時(shí)捕獲的,通常作為 Python 啟動(dòng)時(shí)處理 site.py 的一部分。除了通過(guò)直接修改 os.environ 之外,在此之后對(duì)環(huán)境所做的更改不會(huì)反映在 os.environ 中。
該映射除了可以用于查詢(xún)環(huán)境外,還能用于修改環(huán)境。當(dāng)該映射被修改時(shí),將自動(dòng)調(diào)用 putenv()。
在Unix系統(tǒng)上,鍵和值會(huì)使用 sys.getfilesystemencoding() 和 'surrogateescape' 的錯(cuò)誤處理。如果你想使用其他的編碼,使用 environb。
備注
直接調(diào)用 putenv() 并不會(huì)影響 os.environ ,所以推薦直接修改 os.environ 。
備注
在某些平臺(tái)上,包括 FreeBSD 和 macOS,設(shè)置 environ 可能導(dǎo)致內(nèi)存泄漏。 請(qǐng)參閱 putenv() 的系統(tǒng)文檔。
可以刪除映射中的元素來(lái)刪除對(duì)應(yīng)的環(huán)境變量。當(dāng)從 os.environ 刪除元素時(shí),以及調(diào)用 pop() 或 clear() 之一時(shí),將自動(dòng)調(diào)用 unsetenv()。
在 3.9 版更改: 已更新并支持了 PEP 584 的合并 (|) 和更新 (|=) 運(yùn)算符。
os.environb
environ 的字節(jié)版本:一個(gè) mapping 對(duì)象,其中鍵值都是 bytes 對(duì)象,代表進(jìn)程環(huán)境。 environ 和 environb 是同步的(修改 environb 會(huì)更新 environ,反之亦然)。
只有在 supports_bytes_environ 為 True 的時(shí)候 environb 才是可用的。
3.2 新版功能.
在 3.9 版更改: 已更新并支持了 PEP 584 的合并 (|) 和更新 (|=) 運(yùn)算符。
os.chdir(path)
os.fchdir(fd)
os.getcwd()
以上函數(shù)請(qǐng)參閱 文件和目錄 。
os.fsencode(filename)
將 類(lèi)似路徑形式的 filename 編碼為 filesystem encoding and error handler;原樣返回 bytes。
fsdecode() 是此函數(shù)的逆向函數(shù)。
3.2 新版功能.
在 3.6 版更改: 增加對(duì)實(shí)現(xiàn)了 os.PathLike 接口的對(duì)象的支持。
os.fsdecode(filename)
根據(jù) filesystem encoding and error handler 來(lái)解碼 類(lèi)似路徑形式的 filename;原樣返回 str。
fsencode() 是此函數(shù)的逆向函數(shù)。
3.2 新版功能.
在 3.6 版更改: 增加對(duì)實(shí)現(xiàn)了 os.PathLike 接口的對(duì)象的支持。
os.fspath(path)
返回路徑的文件系統(tǒng)表示。
如果傳入的是 str 或 bytes 類(lèi)型的字符串,將原樣返回。否則 __fspath__() 將被調(diào)用,如果得到的是一個(gè) str 或 bytes 類(lèi)型的對(duì)象,那就返回這個(gè)值。其他所有情況則會(huì)拋出 TypeError 異常。
3.6 新版功能.
class os.PathLike
某些對(duì)象用于表示文件系統(tǒng)中的路徑(如 pathlib.PurePath 對(duì)象),本類(lèi)是這些對(duì)象的 抽象基類(lèi)。
3.6 新版功能.
abstractmethod __fspath__()
返回當(dāng)前對(duì)象的文件系統(tǒng)表示。
這個(gè)方法只應(yīng)該返回一個(gè) str 字符串或 bytes 字節(jié)串,請(qǐng)優(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)上,鍵和值會(huì)使用 sys.getfilesystemencoding() 和``‘surrogateescape’`` 錯(cuò)誤處理進(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 時(shí)可用。
可用性: Unix。
3.2 新版功能.
os.get_exec_path(env=None)
返回將用于搜索可執(zhí)行文件的目錄列表,與在外殼程序中啟動(dòng)一個(gè)進(jìn)程時(shí)相似。指定的 env 應(yīng)為用于搜索 PATH 的環(huán)境變量字典。默認(rèn)情況下,當(dāng) env 為 None 時(shí),將會(huì)使用 environ 。
3.2 新版功能.
os.getegid()
返回當(dāng)前進(jìn)程的有效組ID。對(duì)應(yīng)當(dāng)前進(jìn)程執(zhí)行文件的 “set id” 位。
Availability: Unix, not Emscripten, not WASI.
os.geteuid()
返回當(dāng)前進(jìn)程的有效用戶(hù)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() 會(huì)和其他 Unix 平臺(tái)有所不同。 如果 Python 解釋器是在 10.5 或更早版本中部署的,則 getgroups() 會(huì)返回與當(dāng)前用戶(hù)進(jìn)程相關(guān)聯(lián)的有效組 ID 列表;該列表受限于系統(tǒng)預(yù)定義的條目數(shù)量,通常為 16,并且在適當(dāng)?shù)臋?quán)限下還可通過(guò)調(diào)用 setgroups() 來(lái)修改。 如果是在高于 10.5 的版本中部署的,則 getgroups() 會(huì)返回與進(jìn)程的有效用戶(hù) ID 相關(guān)聯(lián)的當(dāng)前組訪(fǎng)問(wèn)列表;組訪(fǎng)問(wèn)列表可能會(huì)在進(jìn)程的生命周期之內(nèi)發(fā)生改變,它不會(huì)受對(duì) setgroups() 的調(diào)用影響,且其長(zhǎng)度也不被限制為 16。 部署目標(biāo)值 MACOSX_DEPLOYMENT_TARGET 可以通過(guò) sysconfig.get_config_var() 來(lái)獲取。
os.getlogin()
返回通過(guò)控制終端進(jìn)程進(jìn)行登錄的用戶(hù)名。在多數(shù)情況下,使用 getpass.getuser() 會(huì)更有效,因?yàn)楹笳邥?huì)通過(guò)檢查環(huán)境變量 LOGNAME 或 USERNAME 來(lái)查找用戶(hù),再由 pwd.getpwuid(os.getuid())[0] 來(lái)獲取當(dāng)前用戶(hù) 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)時(shí)進(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)中的一個(gè),在Windows中仍然是同一個(gè)進(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)先級(jí)。which 參數(shù)值可以是 PRIO_PROCESS,PRIO_PGRP,或 PRIO_USER 中的一個(gè),who 是相對(duì)于 which (PRIO_PROCESS 的進(jìn)程標(biāo)識(shí)符,PRIO_PGRP 的進(jìn)程組標(biāo)識(shí)符和 PRIO_USER 的用戶(hù)ID)。當(dāng) who 為 0 時(shí)(分別)表示調(diào)用的進(jìn)程,調(diào)用進(jìn)程的進(jìn)程組或調(diào)用進(jìn)程所屬的真實(shí)用戶(hù) 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()
返回一個(gè)由 (ruid, euid, suid) 所組成的元組,分別表示當(dāng)前進(jìn)程的真實(shí)用戶(hù)ID,有效用戶(hù)ID和暫存用戶(hù)ID。
Availability: Unix, not Emscripten, not WASI.
3.2 新版功能.
os.getresgid()
返回一個(gè)由 (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í)用戶(hù)ID。
可用性: Unix。
os.initgroups(username, gid, /)
調(diào)用系統(tǒng) initgroups(),使用指定用戶(hù)所在的所有值來(lái)初始化組訪(fǎng)問(wèn)列表,包括指定的組ID。
Availability: Unix, not Emscripten, not WASI.
3.2 新版功能.
os.putenv(key, value, /)
將名為 key 的環(huán)境變量值設(shè)置為 value。該變量名修改會(huì)影響由 os.system(), popen() ,fork() 和 execv() 發(fā)起的子進(jìn)程。
對(duì) os.environ 中的項(xiàng)目的賦值會(huì)自動(dòng)轉(zhuǎn)化為對(duì) putenv() 的相應(yīng)調(diào)用;然而,對(duì) putenv() 的調(diào)用并不更新 os.environ ,所以實(shí)際上最好是賦值到 os.environ 的項(xiàng)目。這也適用于 getenv() 和 getenvb() ,它們分別使用 os.environ 和 os.environb 在它們的實(shí)現(xiàn)中。
備注
在某些平臺(tái)上,包括 FreeBSD 和 macOS,設(shè)置 environ 可能導(dǎo)致內(nèi)存泄漏。 請(qǐng)參閱 putenv() 的系統(tǒng)文檔。
引發(fā)一個(gè) 審計(jì)事件 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)程的有效用戶(hù)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ù)必須為一個(gè)序列,每個(gè)元素應(yīng)為每個(gè)組的數(shù)字ID。該操作通常只適用于超級(jí)用戶(hù)。
Availability: Unix, not Emscripten, not WASI.
備注
在 macOS 中,groups 的長(zhǎng)度不能超過(guò)系統(tǒng)定義的最大有效組 ID 數(shù)量,通常為 16。 對(duì)于未返回與調(diào)用 setgroups() 產(chǎn)生的相同組列表的情況,請(qǐng)參閱 getgroups() 的文檔。
os.setpgrp()
根據(jù)已實(shí)現(xiàn)的版本(如果有)來(lái)調(diào)用系統(tǒng) setpgrp() 或 setpgrp(0, 0) 。相關(guān)說(shuō)明,請(qǐng)參考 Unix 手冊(cè)。
Availability: Unix, not Emscripten, not WASI.
os.setpgid(pid, pgrp, /)
使用系統(tǒng)調(diào)用 setpgid(),將 pid 對(duì)應(yīng)進(jìn)程的組ID設(shè)置為 pgrp。相關(guān)說(shuō)明,請(qǐng)參考 Unix 手冊(cè)。
Availability: Unix, not Emscripten, not WASI.
os.setpriority(which, who, priority)
設(shè)置程序調(diào)度優(yōu)先級(jí)。 which 的值為 PRIO_PROCESS, PRIO_PGRP 或 PRIO_USER 之一,而 who 會(huì)相對(duì)于 which (PRIO_PROCESS 的進(jìn)程標(biāo)識(shí)符, PRIO_PGRP 的進(jìn)程組標(biāo)識(shí)符和 PRIO_USER 的用戶(hù) ID) 被解析。 who 值為零 (分別) 表示調(diào)用進(jìn)程,調(diào)用進(jìn)程的進(jìn)程組或調(diào)用進(jìn)程的真實(shí)用戶(hù) ID。 priority 是范圍在 -20 至 19 的值。 默認(rèn)優(yōu)先級(jí)為 0;較小的優(yōu)先級(jí)數(shù)值會(huì)更優(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í),有效和暫存用戶(hù)ID。
Availability: Unix, not Emscripten, not WASI.
3.2 新版功能.
os.setreuid(ruid, euid, /)
設(shè)置當(dāng)前進(jìn)程的真實(shí)和有效用戶(hù)ID。
Availability: Unix, not Emscripten, not WASI.
os.getsid(pid, /)
調(diào)用系統(tǒng)調(diào)用 getsid()。相關(guān)說(shuō)明,請(qǐng)參考 Unix 手冊(cè)。
Availability: Unix, not Emscripten, not WASI.
os.setsid()
使用系統(tǒng)調(diào)用 getsid()。相關(guān)說(shuō)明,請(qǐng)參考 Unix 手冊(cè)。
Availability: Unix, not Emscripten, not WASI.
os.setuid(uid, /)
設(shè)置當(dāng)前進(jìn)程的用戶(hù)ID。
Availability: Unix, not Emscripten, not WASI.
os.strerror(code, /)
根據(jù) code 中的錯(cuò)誤碼返回錯(cuò)誤消息。 在某些平臺(tái)上當(dāng)給出未知錯(cuò)誤碼時(shí) strerror() 將返回 NULL 并會(huì)引發(fā) ValueError。
os.supports_bytes_environ
如果操作系統(tǒng)上原生環(huán)境類(lèi)型是字節(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)的識(shí)別信息。返回值是一個(gè)有5個(gè)屬性的對(duì)象:
sysname- 操作系統(tǒng)名nodename- 機(jī)器在網(wǎng)絡(luò)上的名稱(chēng)(需要先設(shè)定)release- 操作系統(tǒng)發(fā)行信息version- 操作系統(tǒng)版本信息machine- 硬件標(biāo)識(shí)符
為了向后兼容,該對(duì)象也是可迭代的,像是一個(gè)按照 sysname,nodename,release,version,和 machine 順序組成的元組。
有些系統(tǒng)會(huì)將 nodename 截短為 8 個(gè)字符或截短至前綴部分;獲取主機(jī)名的一個(gè)更好方式是 socket.gethostname() 或甚至可以用 socket.gethostbyaddr(socket.gethostname())。
可用性: Unix。
在 3.3 版更改: 返回結(jié)果的類(lèi)型由元組變成一個(gè)類(lèi)似元組的對(duì)象,同時(shí)具有命名的屬性。
os.unsetenv(key, /)
取消設(shè)置(刪除)名為 key 的環(huán)境變量。變量名的改變會(huì)影響由 os.system(),popen(),fork() 和 execv() 觸發(fā)的子進(jìn)程。
刪除 os.environ 中的項(xiàng)目會(huì)自動(dòng)轉(zhuǎn)化為對(duì) unsetenv() 的相應(yīng)調(diào)用;然而,對(duì) unsetenv() 的調(diào)用并不更新 os.environ ,所以實(shí)際上最好是刪除 os.environ 的項(xiàng)目。
引發(fā)一個(gè) 審計(jì)事件 os.unsetenv,附帶參數(shù) key。
在 3.9 版更改: 該函數(shù)現(xiàn)在總是可用,并且在 Windows 上也可用。
創(chuàng)建文件對(duì)象
這些函數(shù)創(chuàng)建新的 file objects 。(參見(jiàn) open() 以獲取打開(kāi)文件描述符的相關(guān)信息。)
os.fdopen(fd, \args,**kwargs*)
返回打開(kāi)文件描述符 fd 對(duì)應(yīng)文件的對(duì)象。類(lèi)似內(nèi)建 open() 函數(shù),二者接受同樣的參數(shù)。不同之處在于 fdopen() 第一個(gè)參數(shù)應(yīng)該為整數(shù)。
文件描述符操作
這些函數(shù)對(duì)文件描述符所引用的 I/O 流進(jìn)行操作。
文件描述符是一些小的整數(shù),對(duì)應(yīng)于當(dāng)前進(jìn)程所打開(kāi)的文件。例如,標(biāo)準(zhǔn)輸入的文件描述符通常是0,標(biāo)準(zhǔn)輸出是1,標(biāo)準(zhǔn)錯(cuò)誤是2。之后被進(jìn)程打開(kāi)的文件的文件描述符會(huì)被依次指定為3,4,5等。“文件描述符”這個(gè)詞有點(diǎn)誤導(dǎo)性,在 Unix 平臺(tái)中套接字和管道也被文件描述符所引用。
當(dāng)需要時(shí),可以用 fileno() 可以獲得 file object 所對(duì)應(yīng)的文件描述符。需要注意的是,直接使用文件描述符會(huì)繞過(guò)文件對(duì)象的方法,會(huì)忽略如數(shù)據(jù)內(nèi)部緩沖等情況。
os.close(fd)
關(guān)閉文件描述符 fd。
備注
該功能適用于低級(jí) I/O 操作,必須用于 os.open() 或 pipe() 返回的文件描述符。若要關(guān)閉由內(nèi)建函數(shù) open()、popen() 或 fdopen() 返回的 “文件對(duì)象”,則應(yīng)使用其相應(yīng)的 close() 方法。
os.closerange(fd_low, fd_high, /)
關(guān)閉從 fd_low (包括)到 fd_high (排除)間的文件描述符,并忽略錯(cuò)誤。類(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 復(fù)制 count 字節(jié),從偏移量 offset_src 開(kāi)始讀取,到文件描述符 dst,從偏移量 offset_dst 開(kāi)始寫(xiě)入。如果 offset_src 為 None,則 src 將從當(dāng)前位置開(kāi)始讀取;offset_dst 同理。src 和 dst 指向的文件必須處于相同的文件系統(tǒng),否則將會(huì)拋出一個(gè) errno 被設(shè)為 errno.EXDEV 的 OSError 。
此復(fù)制的完成沒(méi)有額外的從內(nèi)核到用戶(hù)空間再回到內(nèi)核的數(shù)據(jù)轉(zhuǎn)移花費(fèi)。另外,一些文件系統(tǒng)可能實(shí)現(xiàn)額外的優(yōu)化。完成復(fù)制就如同打開(kāi)兩個(gè)二進(jìn)制文件一樣。
返回值是復(fù)制的字節(jié)的數(shù)目。這可能低于需求的數(shù)目。
Availability: Linux >= 4.5 with glibc >= 2.27.
3.8 新版功能.
os.device_encoding(fd)
如果連接到終端,則返回一個(gè)與 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, /)
返回一個(gè)文件描述符 fd 的副本。該文件描述符的副本是 不可繼承的。
在 Windows 中,當(dāng)復(fù)制一個(gè)標(biāo)準(zhǔn)流(0: stdin, 1: stdout, 2: stderr)時(shí),新的文件描述符是 可繼承的。
Availability: not WASI.
在 3.4 版更改: 新的文件描述符現(xiàn)在是不可繼承的。
os.dup2(fd, fd2, inheritable=True)
把文件描述符 fd 復(fù)制為 fd2,必要時(shí)先關(guān)閉后者。返回 fd2。新的文件描述符默認(rèn)是 可繼承的,除非在 inheritable 為 False 時(shí),是不可繼承的。
Availability: not WASI.
在 3.4 版更改: 添加可選參數(shù) inheritable。
在 3.7 版更改: 成功時(shí)返回 fd2,以過(guò)去的版本中,總是返回 None。
os.fchmod(fd, mode)
將 fd 指定文件的權(quán)限狀態(tài)修改為 mode??梢詤⒖?chmod() 中列出 mode 的可用值。從Python 3.3開(kāi)始,這相當(dāng)于 os.chmod(fd, mode)。
引發(fā)一個(gè) 審計(jì)事件 os.chmod,附帶參數(shù) path、mode、dir_fd。
可用性: Unix。
os.fchown(fd, uid, gid)
分別將 fd 指定文件的所有者和組 ID 修改為 uid 和 gid 的值。若不想變更其中的某個(gè) ID,可將相應(yīng)值設(shè)為 -1。參考 chown()。從 Python 3.3 開(kāi)始,這相當(dāng)于 os.chown(fd, uid, gid)。
引發(fā)一個(gè) 審計(jì)事件 os.chown,附帶參數(shù) path、uid、gid、dir_fd。
可用性: Unix。
os.fdatasync(fd)
強(qiáng)制將文件描述符 fd 指定文件寫(xiě)入磁盤(pán)。不強(qiáng)制更新元數(shù)據(jù)。
可用性: Unix。
備注
該功能在 MacOS 中不可用。
os.fpathconf(fd, name, /)
返回與打開(kāi)的文件有關(guān)的系統(tǒng)配置信息。name 指定要查找的配置名稱(chēng),它可以是字符串,是一個(gè)系統(tǒng)已定義的名稱(chēng),這些名稱(chēng)定義在不同標(biāo)準(zhǔn)(POSIX.1,Unix 95,Unix 98 等)中。一些平臺(tái)還定義了額外的其他名稱(chēng)。當(dāng)前操作系統(tǒng)已定義的名稱(chēng)在 pathconf_names 字典中給出。對(duì)于未包含在該映射中的配置名稱(chēng),也可以傳遞一個(gè)整數(shù)作為 name。
如果 name 是一個(gè)字符串且不是已定義的名稱(chēng),將拋出 ValueError 異常。如果當(dāng)前系統(tǒng)不支持 name 指定的配置名稱(chēng),即使該名稱(chēng)存在于 pathconf_names,也會(huì)拋出 OSError 異常,錯(cuò)誤碼為 errno.EINVAL。
從 Python 3.3 起,此功能等價(jià)于 os.pathconf(fd, name)。
可用性: Unix。
os.fstat(fd)
獲取文件描述符 fd 的狀態(tài). 返回一個(gè) stat_result 對(duì)象。
從 Python 3.3 起,此功能等價(jià)于 os.stat(fd)。
參見(jiàn)
stat() 函數(shù)。
os.fstatvfs(fd, /)
返回文件系統(tǒng)的信息,該文件系統(tǒng)是文件描述符 fd 指向的文件所在的文件系統(tǒng),與 statvfs() 一樣。從 Python 3.3 開(kāi)始,它等效于 os.statvfs(fd)。
可用性: Unix。
os.fsync(fd)
強(qiáng)制將文件描述符 fd 指向的文件寫(xiě)入磁盤(pán)。在 Unix,這將調(diào)用原生 fsync() 函數(shù);在 Windows,則是 MS _commit() 函數(shù)。
如果要寫(xiě)入的是緩沖區(qū)內(nèi)的 Python 文件對(duì)象 f,請(qǐng)先執(zhí)行 f.flush(),然后執(zhí)行 os.fsync(f.fileno()),以確保與 f 關(guān)聯(lián)的所有內(nèi)部緩沖區(qū)都寫(xiě)入磁盤(pán)。
可用性: Unix, Windows。
os.ftruncate(fd, length, /)
截?cái)辔募枋龇?fd 指向的文件,以使其最大為 length 字節(jié)。從 Python 3.3 開(kāi)始,它等效于 os.truncate(fd, length)。
引發(fā)一個(gè) 審計(jì)事件 os.truncate,附帶參數(shù) fd, length。
可用性: Unix, Windows。
在 3.5 版更改: 添加了 Windows 支持
os.get_blocking(fd, /)
獲取文件描述符的阻塞模式:如果設(shè)置了 O_NONBLOCK 標(biāo)志位,返回 False,如果該標(biāo)志位被清除,返回 True。
參見(jiàn) set_blocking() 和 socket.socket.setblocking()。
可用性: Unix。
3.5 新版功能.
os.isatty(fd, /)
如果文件描述符 fd 打開(kāi)且已連接至 tty 設(shè)備(或類(lèi) tty 設(shè)備),返回 True,否則返回 False。
os.lockf(fd, cmd, len, /)
在打開(kāi)的文件描述符上,使用、測(cè)試或刪除 POSIX 鎖。fd 是一個(gè)打開(kāi)的文件描述符。cmd 指定要進(jìn)行的操作,它們是 F_LOCK、F_TLOCK、F_ULOCK 或 F_TEST 中的一個(gè)。len 指定哪部分文件需要鎖定。
引發(fā)一個(gè) 審計(jì)事件 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,位置的計(jì)算方式 how 如下:設(shè)置為 SEEK_SET 或 0 表示從文件開(kāi)頭計(jì)算,設(shè)置為 SEEK_CUR 或 1 表示從文件當(dāng)前位置計(jì)算,設(shè)置為 SEEK_END 或 2 表示文件末尾計(jì)算。返回新指針位置,這個(gè)位置是從文件開(kāi)頭計(jì)算的,單位是字節(jié)。
os.SEEK_SET
os.SEEK_CUR
os.SEEK_END
lseek() 函數(shù)的參數(shù),它們的值分別為 0、1 和 2。
3.3 新版功能: 某些操作系統(tǒng)可能支持其他值,例如 os.SEEK_HOLE 或 os.SEEK_DATA。
os.open(path, flags, mode=0o777, **,dir_fd=None*)
打開(kāi)文件 path,根據(jù) flags 設(shè)置各種標(biāo)志位,并根據(jù) mode 設(shè)置其權(quán)限狀態(tài)。當(dāng)計(jì)算 mode 時(shí),會(huì)首先根據(jù)當(dāng)前 umask 值將部分權(quán)限去除。本方法返回新文件的描述符。新的文件描述符是 不可繼承 的。
有關(guān) flag 和 mode 取值的說(shuō)明,請(qǐng)參見(jiàn) C 運(yùn)行時(shí)文檔。標(biāo)志位常量(如 O_RDONLY 和 O_WRONLY)在 os 模塊中定義。特別地,在 Windows 上需要添加 O_BINARY 才能以二進(jìn)制模式打開(kāi)文件。
本函數(shù)帶有 dir_fd 參數(shù),支持 基于目錄描述符的相對(duì)路徑。
open 附帶參數(shù) path、mode、flags 會(huì)引發(fā) 審計(jì)事件。
在 3.4 版更改: 新的文件描述符現(xiàn)在是不可繼承的。
備注
本函數(shù)適用于底層的 I/O。常規(guī)用途請(qǐng)使用內(nèi)置函數(shù) open(),該函數(shù)的 read() 和 write() 方法(及其他方法)會(huì)返回 文件對(duì)象。要將文件描述符包裝在文件對(duì)象中,請(qǐng)使用 fdopen()。
3.3 新版功能: dir_fd 參數(shù)。
在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號(hào)處理程序沒(méi)有觸發(fā)異常,此函數(shù)現(xiàn)在會(huì)重試系統(tǒng)調(diào)用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。
在 3.6 版更改: 接受一個(gè) path-like object。
以下常量是 open() 函數(shù) flags 參數(shù)的選項(xiàng)??梢杂冒次换蜻\(yùn)算符 | 將它們組合使用。部分常量并非在所有平臺(tái)上都可用。有關(guān)其可用性和用法的說(shuō)明,請(qǐng)參閱 open(2)) 手冊(cè)(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è)常數(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
這個(gè)常數(shù)僅在 Windows 系統(tǒng)中可用。
os.O_EVTONLY
os.O_FSYNC
os.O_SYMLINK
os.O_NOFOLLOW_ANY
以上常量?jī)H適用于 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 庫(kù)未定義它們,則不存在。
在 3.4 版更改: 在支持的系統(tǒng)上增加 O_PATH。增加 O_TMPFILE,僅在 Linux Kernel 3.11 或更高版本可用。
os.openpty()
打開(kāi)一對(duì)新的偽終端,返回一對(duì)文件描述符 (主,從),分別為 pty 和 tty。新的文件描述符是 不可繼承 的。對(duì)于(稍微)輕量一些的方法,請(qǐng)使用 pty 模塊。
Availability: Unix, not Emscripten, not WASI.
在 3.4 版更改: 新的文件描述符不再可繼承。
os.pipe()
創(chuàng)建一個(gè)管道,返回一對(duì)分別用于讀取和寫(xiě)入的文件描述符 (r, w)。新的文件描述符是 不可繼承 的。
可用性: Unix, Windows。
在 3.4 版更改: 新的文件描述符不再可繼承。
os.pipe2(flags, /)
創(chuàng)建帶有 flags 標(biāo)志位的管道??赏ㄟ^(guò)對(duì)以下一個(gè)或多個(gè)值進(jìn)行“或”運(yùn)算來(lái)構(gòu)造這些 flags:O_NONBLOCK、O_CLOEXEC。返回一對(duì)分別用于讀取和寫(xiě)入的文件描述符 (r, w)。
Availability: Unix, not Emscripten, not WASI.
3.3 新版功能.
os.posix_fallocate(fd, offset, len, /)
確保為 fd 指向的文件分配了足夠的磁盤(pán)空間,該空間從偏移量 offset 開(kāi)始,到 len 字節(jié)為止。
Availability: Unix, not Emscripten.
3.3 新版功能.
os.posix_fadvise(fd, offset, len, advice, /)
聲明即將以特定模式訪(fǎng)問(wèn)數(shù)據(jù),使內(nèi)核可以提前進(jìn)行優(yōu)化。數(shù)據(jù)范圍是從 fd 所指向文件的 offset 開(kāi)始,持續(xù) len 個(gè)字節(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)志位,指定可能使用的訪(fǎng)問(wèn)模式。
可用性: Unix。
3.3 新版功能.
os.pread(fd, n, offset, /)
從文件描述符 fd 所指向文件的偏移位置 offset 開(kāi)始,讀取至多 n 個(gè)字節(jié),而保持文件偏移量不變。
返回所讀取字節(jié)的字節(jié)串 (bytestring)。如果到達(dá)了 fd 指向的文件末尾,則返回空字節(jié)對(duì)象。
可用性: Unix。
3.3 新版功能.
os.preadv(fd, buffers, offset, flags=0, /)
從文件描述符 fd 所指向文件的偏移位置 offset 開(kāi)始,將數(shù)據(jù)讀取至可變 字節(jié)類(lèi)對(duì)象 緩沖區(qū) buffers 中,保持文件偏移量不變。將數(shù)據(jù)依次存放到每個(gè)緩沖區(qū)中,填滿(mǎn)一個(gè)后繼續(xù)存放到序列中的下一個(gè)緩沖區(qū),來(lái)保存其余數(shù)據(jù)。
flags 參數(shù)可以由零個(gè)或多個(gè)標(biāo)志位進(jìn)行按位或運(yùn)算來(lái)得到:
RWF_HIPRI
RWF_NOWAIT
返回實(shí)際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對(duì)象的總?cè)萘俊?/p>
操作系統(tǒng)可能對(duì)允許使用的緩沖區(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
不要等待無(wú)法立即獲得的數(shù)據(jù)。如果指定了此標(biāo)志,那么當(dāng)需要從后備存儲(chǔ)器中讀取數(shù)據(jù),或等待文件鎖時(shí),系統(tǒng)調(diào)用將立即返回。
如果成功讀取數(shù)據(jù),則返回讀取的字節(jié)數(shù)。如果未讀取到數(shù)據(jù),則返回 -1,并將錯(cuò)誤碼 errno 置為 errno.EAGAIN。
Availability: Linux >= 4.14.
3.7 新版功能.
os.RWF_HIPRI
高優(yōu)先級(jí)讀/寫(xiě)。允許基于塊的文件系統(tǒng)對(duì)設(shè)備進(jìn)行輪詢(xún),這樣可以降低延遲,但可能會(huì)占用更多資源。
目前在 Linux 上,此功能僅在使用 O_DIRECT 標(biāo)志打開(kāi)的文件描述符上可用。
Availability: Linux >= 4.6.
3.7 新版功能.
os.pwrite(fd, str, offset, /)
將 str 中的字節(jié)串 (bytestring) 寫(xiě)入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。
返回實(shí)際寫(xiě)入的字節(jié)數(shù)。
可用性: Unix。
3.3 新版功能.
os.pwritev(fd, buffers, offset, flags=0, /)
將緩沖區(qū) buffers 的內(nèi)容寫(xiě)入文件描述符 fd 的偏移位置 offset 處,保持文件偏移量不變。緩沖區(qū) buffers 必須是由 字節(jié)類(lèi)對(duì)象 組成的序列。緩沖區(qū)以數(shù)組順序處理。先寫(xiě)入第一個(gè)緩沖區(qū)的全部?jī)?nèi)容,再寫(xiě)入第二個(gè)緩沖區(qū),照此繼續(xù)。
flags 參數(shù)可以由零個(gè)或多個(gè)標(biāo)志位進(jìn)行按位或運(yùn)算來(lái)得到:
RWF_DSYNC
RWF_SYNC
RWF_APPEND
返回實(shí)際寫(xiě)入的字節(jié)總數(shù)。
操作系統(tǒng)可能對(duì)允許使用的緩沖區(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ù)寫(xiě)功能,等效于帶 O_DSYNC 標(biāo)志的 os.open() 。本標(biāo)志只作用于通過(guò)系統(tǒng)調(diào)用寫(xiě)入的數(shù)據(jù)。
Availability: Linux >= 4.7.
3.7 新版功能.
os.RWF_SYNC
提供預(yù)寫(xiě)功能,等效于帶 O_SYNC 標(biāo)志的 os.open() 。本標(biāo)志只作用于通過(guò)系統(tǒng)調(diào)用寫(xiě)入的數(shù)據(jù)。
Availability: Linux >= 4.7.
3.7 新版功能.
os.RWF_APPEND
提供預(yù)寫(xiě)功能,等效于帶 O_APPEND 標(biāo)志的 os.open() 。本標(biāo)志只對(duì) os.pwritev() 有意義,只作用于通過(guò)系統(tǒng)調(diào)用寫(xiě)入的數(shù)據(jù)。參數(shù) offset 對(duì)寫(xiě)入操作無(wú)效;數(shù)據(jù)總是會(huì)添加到文件的末尾。但如果 offset 參數(shù)為 -1,則會(huì)刷新當(dāng)前文件的 offset 。
Availability: Linux >= 4.16.
3.10 新版功能.
os.read(fd, n, /)
從文件描述符 fd 中讀取至多 n 個(gè)字節(jié)。
返回所讀取字節(jié)的字節(jié)串 (bytestring)。如果到達(dá)了 fd 指向的文件末尾,則返回空字節(jié)對(duì)象。
備注
該功能適用于低級(jí) I/O 操作,必須用于 os.open() 或 pipe() 返回的文件描述符。若要讀取由內(nèi)建函數(shù) open()、popen()、fdopen() 或 sys.stdin 返回的 “文件對(duì)象”,則應(yīng)使用其相應(yīng)的 read() 或 readline() 方法。
在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號(hào)處理程序沒(méi)有觸發(fā)異常,此函數(shù)現(xiàn)在會(huì)重試系統(tǒng)調(diào)用,而不是觸發(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 字節(jié)復(fù)制到文件描述符 out_fd 的偏移位置 offset 處。返回復(fù)制的字節(jié)數(shù),如果到達(dá) EOF,返回 0。
定義了 sendfile() 的所有平臺(tái)均支持第一種函數(shù)用法。
在 Linux 上,將 offset 設(shè)置為 None,則從 in_fd 的當(dāng)前位置開(kāi)始讀取,并更新 in_fd 的位置。
第二種情況可以被用于 macOS 和 FreeBSD,其中 headers 和 trailers 是任意的緩沖區(qū)序列,它們會(huì)在寫(xiě)入來(lái)自 in_fd 的數(shù)據(jù)之前被寫(xiě)入。 它的返回內(nèi)容與第一種情況相同。
在 macOS 和 FreeBSD 上,傳入 0 值作為 count 將指定持續(xù)發(fā)送直至到達(dá) in_fd 的末尾。
所有平臺(tái)都支持將套接字作為 out_fd 文件描述符,有些平臺(tái)也支持其他類(lèi)型(如常規(guī)文件或管道)。
跨平臺(tái)應(yīng)用程序不應(yīng)使用 headers、trailers 和 flags 參數(shù)。
Availability: Unix, not Emscripten, not WASI.
備注
有關(guān) sendfile() 的高級(jí)封裝,參見(jiàn) socket.socket.sendfile()。
3.3 新版功能.
在 3.9 版更改: out 和 in 參數(shù)被重命名為 out_fd 和 in_fd。
os.set_blocking(fd, blocking, /)
設(shè)置指定文件描述符的阻塞模式:如果 blocking 為 False,則為該描述符設(shè)置 O_NONBLOCK 標(biāo)志位,反之則清除該標(biāo)志位。
參見(jiàn) 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 開(kāi)始讀取,到文件描述符 dst,從偏移量 offset_dst 開(kāi)始寫(xiě)入。至少得有一個(gè)文件描述符必須指向管道。如果 offset_src 為 None,則 src 將從當(dāng)前位置開(kāi)始讀取;offset_dst 同理。指向管道的文件描述符,其偏移量必須為 None。 src 和 dst 指向的文件必須處于同一文件系統(tǒng)中,否則將會(huì)觸發(fā) OSError ,其 errno 將被設(shè)為 errno.EXDEV 。
此復(fù)制的完成沒(méi)有額外的從內(nèi)核到用戶(hù)空間再回到內(nèi)核的數(shù)據(jù)轉(zhuǎn)移花費(fèi)。另外,一些文件系統(tǒng)可能實(shí)現(xiàn)額外的優(yōu)化。完成復(fù)制就如同打開(kāi)兩個(gè)二進(jìn)制文件一樣。
調(diào)用成功后,返回拼接到管道的字節(jié)數(shù)或從管道拼接出來(lái)的字節(jié)數(shù)。返回值為 0 意味著輸入結(jié)束。如果 src 指向一個(gè)管道,則意味著沒(méi)有數(shù)據(jù)需要傳輸,而且由于沒(méi)有寫(xiě)入程序連到管道的寫(xiě)入端,所以將不會(huì)阻塞。
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ù)讀取至多個(gè)可變的 字節(jié)類(lèi)對(duì)象 緩沖區(qū) buffers 中。將數(shù)據(jù)依次存放到每個(gè)緩沖區(qū)中,填滿(mǎn)一個(gè)后繼續(xù)存放到序列中的下一個(gè)緩沖區(qū),來(lái)保存其余數(shù)據(jù)。
返回實(shí)際讀取的字節(jié)總數(shù),該總數(shù)可以小于所有對(duì)象的總?cè)萘俊?/p>
操作系統(tǒng)可能對(duì)允許使用的緩沖區(qū)數(shù)量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。
可用性: Unix。
3.3 新版功能.
os.tcgetpgrp(fd, /)
返回與 fd 指定的終端相關(guān)聯(lián)的進(jìn)程組(fd 是由 os.open() 返回的已打開(kāi)的文件描述符)。
Availability: Unix, not WASI.
os.tcsetpgrp(fd, pg, /)
設(shè)置與 fd 指定的終端相關(guān)聯(lián)的進(jìn)程組為 pg\(*fd* 是由 os.open() 返回的已打開(kāi)的文件描述符)。
Availability: Unix, not WASI.
os.ttyname(fd, /)
返回一個(gè)字符串,該字符串表示與文件描述符 fd 關(guān)聯(lián)的終端。如果 fd 沒(méi)有與終端關(guān)聯(lián),則拋出異常。
可用性: Unix。
os.write(fd, str, /)
將 str 中的字節(jié)串 (bytestring) 寫(xiě)入文件描述符 fd。
返回實(shí)際寫(xiě)入的字節(jié)數(shù)。
備注
該功能適用于低級(jí) I/O 操作,必須用于 os.open() 或 pipe() 返回的文件描述符。若要寫(xiě)入由內(nèi)建函數(shù) open()、popen()、fdopen()、sys.stdout 或 sys.stderr 返回的 “文件對(duì)象”,則應(yīng)使用其相應(yīng)的 write() 方法。
在 3.5 版更改: 如果系統(tǒng)調(diào)用被中斷,但信號(hào)處理程序沒(méi)有觸發(fā)異常,此函數(shù)現(xiàn)在會(huì)重試系統(tǒng)調(diào)用,而不是觸發(fā) InterruptedError 異常 (原因詳見(jiàn) PEP 475)。
os.writev(fd, buffers, /)
將緩沖區(qū) buffers 的內(nèi)容寫(xiě)入文件描述符 fd。緩沖區(qū) buffers 必須是由 字節(jié)類(lèi)對(duì)象 組成的序列。緩沖區(qū)以數(shù)組順序處理。先寫(xiě)入第一個(gè)緩沖區(qū)的全部?jī)?nèi)容,再寫(xiě)入第二個(gè)緩沖區(qū),照此繼續(xù)。
返回實(shí)際寫(xiě)入的字節(jié)總數(shù)。
操作系統(tǒng)可能對(duì)允許使用的緩沖區(qū)數(shù)量有限制(使用 sysconf() 獲取 'SC_IOV_MAX' 值)。
可用性: Unix。
3.3 新版功能.
查詢(xún)終端的尺寸
3.3 新版功能.
os.get_terminal_size(fd=STDOUT_FILENO, /)
返回終端窗口的尺寸,格式為 (columns, lines),它是類(lèi)型為 terminal_size 的元組。
可選參數(shù) fd (默認(rèn)為 STDOUT_FILENO 或標(biāo)準(zhǔn)輸出)指定應(yīng)查詢(xún)的文件描述符。
如果文件描述符未連接到終端,則拋出 OSError 異常。
shutil.get_terminal_size() 是供常規(guī)使用的高階函數(shù),os.get_terminal_size 是其底層的實(shí)現(xiàn)。
可用性: Unix, Windows。
class os.terminal_size
元組的子類(lèi),存儲(chǔ)終端窗口尺寸 (columns, lines)。
columns
終端窗口的寬度,單位為字符。
lines
終端窗口的高度,單位為字符。
文件描述符的繼承
3.4 新版功能.
每個(gè)文件描述符都有一個(gè) “inheritable”(可繼承)標(biāo)志位,該標(biāo)志位控制了文件描述符是否可以由子進(jìn)程繼承。從 Python 3.4 開(kāi)始,由 Python 創(chuàng)建的文件描述符默認(rèn)是不可繼承的。
在 UNIX 上,執(zhí)行新程序時(shí),不可繼承的文件描述符在子進(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)錯(cuò)誤)是始終繼承的。如果使用 spawn* 函數(shù),所有可繼承的句柄和文件描述符都將被繼承。如果使用 subprocess 模塊,將關(guān)閉除標(biāo)準(zhǔn)流以外的所有文件描述符,并且僅當(dāng) close_fds 參數(shù)為 False 時(shí)才繼承可繼承的句柄。
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 平臺(tái)上,許多函數(shù)支持以下一項(xiàng)或多項(xiàng)功能:
指定文件描述符為參數(shù): 通常在 os 模塊中提供給函數(shù)的 path 參數(shù)必須是表示文件路徑的字符串,但是,某些函數(shù)現(xiàn)在可以接受其 path 參數(shù)為打開(kāi)文件描述符,該函數(shù)將對(duì)描述符指向的文件進(jìn)行操作。(對(duì)于 POSIX 系統(tǒng),Python 將調(diào)用以
f開(kāi)頭的函數(shù)變體(如調(diào)用fchdir而不是chdir)。)可以用 os.supports_fd 檢查某個(gè)函數(shù)在你的平臺(tái)上是否支持將 path 參數(shù)指定為文件描述符。如果不支持,使用該功能將拋出 NotImplementedError 異常。
如果該函數(shù)還支持 dir_fd 或 follow_symlinks 參數(shù),那么用文件描述符作為 path 后就不能再指定上述參數(shù)了。
基于目錄描述符的相對(duì)路徑: 如果 dir_fd 不是
None,它就應(yīng)該是一個(gè)指向目錄的文件描述符,這時(shí)待操作的 path 應(yīng)該是相對(duì)路徑,相對(duì)路徑是相對(duì)于前述目錄的。如果 path 是絕對(duì)路徑,則 dir_fd 將被忽略。(對(duì)于 POSIX 系統(tǒng),Python 將調(diào)用該函數(shù)的變體,變體以at結(jié)尾,可能以f開(kāi)頭(如調(diào)用faccessat而不是access)。可以用 os.supports_dir_fd 檢查某個(gè)函數(shù)在你的平臺(tái)上是否支持 dir_fd。如果不支持,使用該功能將拋出 NotImplementedError 異常。
不跟蹤符號(hào)鏈接: 如果 follow_symlinks 為
False,并且待操作路徑的最后一個(gè)元素是符號(hào)鏈接,則該函數(shù)將在符號(hào)鏈接本身而不是鏈接所指向的文件上操作。(對(duì)于 POSIX 系統(tǒng),Python 將調(diào)用該函數(shù)的l...變體。)可以用 os.supports_follow_symlinks 檢查某個(gè)函數(shù)在你的平臺(tái)上是否支持 follow_symlinks。如果不支持,使用該功能將拋出 NotImplementedError 異常。
os.access(path, mode, **,dir_fd=None,effective_ids=False,follow_symlinks=True*)
使用 實(shí)際用戶(hù)ID/用戶(hù)組ID 測(cè)試對(duì) path 的訪(fǎng)問(wèn)。請(qǐng)注意,大多數(shù)測(cè)試操作將使用 有效用戶(hù)ID/用戶(hù)組ID,因此可以在 suid/sgid 環(huán)境中運(yùn)用此例程,來(lái)測(cè)試調(diào)用用戶(hù)是否具有對(duì) path 的指定訪(fǎng)問(wèn)權(quán)限。mode 為 F_OK 時(shí)用于測(cè)試 path 是否存在,也可以對(duì) R_OK、W_OK 和 X_OK 中的一個(gè)或多個(gè)進(jìn)行“或”運(yùn)算來(lái)測(cè)試指定權(quán)限。允許訪(fǎng)問(wèn)則返回 True,否則返回 False。更多信息請(qǐng)參見(jiàn) Unix 手冊(cè)頁(yè) access(2))。
本函數(shù)支持指定 基于目錄描述符的相對(duì)路徑 和 不跟蹤符號(hào)鏈接。
如果 effective_ids 為 True,access() 將使用 有效用戶(hù)ID/用戶(hù)組ID 而非 實(shí)際用戶(hù)ID/用戶(hù)組ID 進(jìn)行訪(fǎng)問(wèn)檢查。您的平臺(tái)可能不支持 effective_ids,您可以使用 os.supports_effective_ids 檢查它是否可用。如果不可用,使用它時(shí)會(huì)拋出 NotImplementedError 異常。
備注
使用 access() 來(lái)檢查用戶(hù)是否具有某項(xiàng)權(quán)限(如打開(kāi)文件的權(quán)限),然后再使用 open() 打開(kāi)文件,這樣做存在一個(gè)安全漏洞,因?yàn)橛脩?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í)際操作仍可能失敗,尤其是對(duì)網(wǎng)絡(luò)文件系統(tǒng)的操作,其權(quán)限語(yǔ)義可能超出常規(guī)的 POSIX 權(quán)限位模型。
在 3.3 版更改: 添加 dir_fd、effective_ids 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.F_OK
os.R_OK
os.W_OK
os.X_OK
作為 access() 的 mode 參數(shù)的可選值,分別測(cè)試 path 的存在性、可讀性、可寫(xiě)性和可執(zhí)行性。
os.chdir(path)
將當(dāng)前工作目錄更改為 path。
本函數(shù)支持 指定文件描述符為參數(shù)。其中,描述符必須指向打開(kāi)的目錄,不能是打開(kāi)的文件。
本函數(shù)可以?huà)伋?OSError 及其子類(lèi)的異常,如 FileNotFoundError、PermissionError 和 NotADirectoryError 異常。
引發(fā)一個(gè) 審計(jì)事件 os.chdir,附帶參數(shù) path。
3.3 新版功能: 在某些平臺(tái)上新增支持將 path 參數(shù)指定為文件描述符。
在 3.6 版更改: 接受一個(gè) path-like object。
os.chflags(path, flags, **,follow_symlinks=True*)
將 path 的 flags 設(shè)置為其他由數(shù)字表示的 flags。flags 可以用以下值按位或組合起來(lái)(以下值在 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ù)支持 不跟蹤符號(hào)鏈接。
引發(fā)一個(gè) 審計(jì)事件 os.chflags,附帶參數(shù) path、flags。
Availability: Unix, not Emscripten, not WASI.
3.3 新版功能: follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.chmod(path, mode, **,dir_fd=None,follow_symlinks=True*)
將 path 的 mode 更改為其他由數(shù)字表示的 mode。mode 可以用以下值之一,也可以將它們按位或組合起來(lái)(以下值在 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ù)支持 指定文件描述符、指定基于目錄描述符的相對(duì)路徑 和 不跟蹤符號(hào)鏈接。
備注
盡管 Windows 支持 chmod(),但只能用它設(shè)置文件的只讀標(biāo)志(stat.S_IWRITE 和 stat.S_IREAD 常量或?qū)?yīng)的整數(shù)值)。所有其他標(biāo)志位都會(huì)被忽略。
The function is limited on Emscripten and WASI, see WebAssembly platforms for more information.
引發(fā)一個(gè) 審計(jì)事件 os.chmod,附帶參數(shù) path、mode、dir_fd。
3.3 新版功能: 添加了指定 path 為文件描述符的支持,以及 dir_fd 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個(gè) path-like object。
os.chown(path, uid, gid, **,dir_fd=None,follow_symlinks=True*)
將 path 的用戶(hù)和組 ID 分別修改為數(shù)字形式的 uid 和 gid。若要使其中某個(gè) ID 保持不變,請(qǐng)將其置為 -1。
本函數(shù)支持 指定文件描述符、指定基于目錄描述符的相對(duì)路徑 和 不跟蹤符號(hào)鏈接。
參見(jiàn)更高階的函數(shù) shutil.chown(),除了數(shù)字 ID 之外,它也接受名稱(chēng)。
引發(fā)一個(gè) 審計(jì)事件 os.chown,附帶參數(shù) path、uid、gid、dir_fd。
可用性: Unix。
3.3 新版功能: 添加了指定 path 為文件描述符的支持,以及 dir_fd 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 支持 類(lèi)路徑對(duì)象。
os.chroot(path)
將當(dāng)前進(jìn)程的根目錄更改為 path。
Availability: Unix, not Emscripten, not WASI.
在 3.6 版更改: 接受一個(gè) path-like object。
os.fchdir(fd)
將當(dāng)前工作目錄更改為文件描述符 fd 指向的目錄。fd 必須指向打開(kāi)的目錄而非文件。從 Python 3.3 開(kāi)始,它等效于 os.chdir(fd)。
引發(fā)一個(gè) 審計(jì)事件 os.chdir,附帶參數(shù) path。
可用性: Unix。
os.getcwd()
返回表示當(dāng)前工作目錄的字符串。
os.getcwdb()
返回表示當(dāng)前工作目錄的字節(jié)串 (bytestring)。
在 3.8 版更改: 在 Windows 上,本函數(shù)現(xiàn)在會(huì)使用 UTF-8 編碼格式而不是 ANSI 代碼頁(yè):請(qǐng)參看 PEP 529 了解具體原因。 該函數(shù)在 Windows 上不再被棄用。
os.lchflags(path, flags)
將 path 的 flags 設(shè)置為其他由數(shù)字表示的 flags,與 chflags() 類(lèi)似,但不跟蹤符號(hào)鏈接。從 Python 3.3 開(kāi)始,它等效于 os.chflags(path, flags, follow_symlinks=False)。
引發(fā)一個(gè) 審計(jì)事件 os.chflags,附帶參數(shù) path、flags。
Availability: Unix, not Emscripten, not WASI.
在 3.6 版更改: 接受一個(gè) path-like object。
os.lchmod(path, mode)
將 path 的權(quán)限狀態(tài)修改為 mode。如果 path 是符號(hào)鏈接,則影響符號(hào)鏈接本身而非鏈接目標(biāo)??梢詤⒖?chmod() 中列出 mode 的可用值。從 Python 3.3 開(kāi)始,它等效于 os.chmod(path, mode, follow_symlinks=False)。
引發(fā)一個(gè) 審計(jì)事件 os.chmod,附帶參數(shù) path、mode、dir_fd。
可用性: Unix。
在 3.6 版更改: 接受一個(gè) path-like object。
os.lchown(path, uid, gid)
將 path 的用戶(hù)和組 ID 分別修改為數(shù)字形式的 uid 和 gid,本函數(shù)不跟蹤符號(hào)鏈接。從 Python 3.3 開(kāi)始,它等效于 os.chown(path, uid, gid, follow_symlinks=False)。
引發(fā)一個(gè) 審計(jì)事件 os.chown,附帶參數(shù) path、uid、gid、dir_fd。
可用性: Unix。
在 3.6 版更改: 接受一個(gè) path-like object。
os.link(src, dst, **,src_dir_fd=None,dst_dir_fd=None,follow_symlinks=True*)
創(chuàng)建一個(gè)指向 src 的硬鏈接,名為 dst。
本函數(shù)支持將 src_dir_fd 和 dst_dir_fd 中的一個(gè)或兩個(gè)指定為 基于目錄描述符的相對(duì)路徑,支持 不跟蹤符號(hào)鏈接。
引發(fā)一個(gè) 審計(jì)事件 os.link 附帶參數(shù) src、dst、src_dir_fd、dst_dir_fd。
可用性: Unix, Windows。
在 3.2 版更改: 添加了對(duì) Windows 的支持。
3.3 新版功能: 添加 src_dir_fd、dst_dir_fd 和 follow_symlinks 參數(shù)。
在 3.6 版更改: 接受一個(gè) 類(lèi)路徑對(duì)象 作為 src 和 dst。
os.listdir(path=’.’)
返回一個(gè)包含由 path 指定目錄中條目名稱(chēng)組成的列表。 該列表按任意順序排列,并且不包括特殊條目 '.' 和 '..',即使它們存在于目錄中。 如果有文件在調(diào)用此函數(shù)期間在被移除或添加到目錄中,是否要包括該文件的名稱(chēng)并沒(méi)有規(guī)定。
path 可以是 類(lèi)路徑對(duì)象。
標(biāo)題名稱(chēng):創(chuàng)新互聯(lián)Python教程:os —- 多種操作系統(tǒng)接口
標(biāo)題來(lái)源:http://www.5511xx.com/article/djscpgh.html


咨詢(xún)
建站咨詢(xún)
