sys
--- 系統相關(guān)的參數和函數?
該模塊提供了一些變量和函數。這些變量可能被解釋器使用,也可能由解釋器提供。這些函數會(huì )影響解釋器。本模塊總是可用的。
- sys.abiflags?
在POSIX系統上,以標準的
configure
腳本構建的 Python 中,這個(gè)變量會(huì )包含 PEP 3149 中定義的ABI標簽。在 3.8 版更改: 默認的 flags 變?yōu)榱丝兆址ㄓ糜?pymalloc 的
m
旗標已經(jīng)移除)3.2 新版功能.
- sys.addaudithook(hook)?
將可調用對象 hook 附加到當前(子)解釋器的活動(dòng)的審計鉤子列表中。
當通過(guò)
sys.audit()
函數引發(fā)審計事件時(shí),每個(gè)鉤子將按照其被加入的先后順序被調用,調用時(shí)會(huì )傳入事件名稱(chēng)和參數元組。 由PySys_AddAuditHook()
添加的原生鉤子會(huì )先被調用,然后是當前(子)解釋器中添加的鉤子。 接下來(lái)這些鉤子會(huì )記錄事件,引發(fā)異常來(lái)中止操作,或是完全終止進(jìn)程。調用
sys.addaudithook()
時(shí)它自身將引發(fā)一個(gè)名為sys.addaudithook
的審計事件且不附帶參數。 如果任何現有的鉤子引發(fā)了派生自RuntimeError
的異常,則新的鉤子不會(huì )被添加并且該異常會(huì )被抑制。 其結果就是,調用者無(wú)法確保他們的鉤子已經(jīng)被添加,除非他們控制了全部現有的鉤子。請參閱 審計事件表 以獲取由 CPython 引發(fā)的所有事件,并參閱 PEP 578 了解最初的設計討論。
3.8 新版功能.
在 3.8.1 版更改: 派生自
Exception
(而非RuntimeError
)的異常不會(huì )被抑制。CPython implementation detail: 啟用跟蹤時(shí)(參閱
settrace()
),僅當可調用對象(鉤子)的__cantrace__
成員設置為 true 時(shí),才會(huì )跟蹤該鉤子。否則,跟蹤功能將跳過(guò)該鉤子。
- sys.argv?
一個(gè)列表,其中包含了被傳遞給 Python 腳本的命令行參數。
argv[0]
為腳本的名稱(chēng)(是否是完整的路徑名取決于操作系統)。如果是通過(guò) Python 解釋器的命令行參數-c
來(lái)執行的,argv[0]
會(huì )被設置成字符串'-c'
。如果沒(méi)有腳本名被傳遞給 Python 解釋器,argv[0]
為空字符串。為了遍歷標準輸入,或者通過(guò)命令行傳遞的文件列表,參照
fileinput
模塊另請參閱
sys.orig_argv
。備注
在 Unix 上,系統傳遞的命令行參數是字節類(lèi)型的。Python 使用文件系統編碼和 "surrogateescape" 錯誤處理方案對它們進(jìn)行解碼。當需要原始字節時(shí),可以通過(guò)
[os.fsencode(arg) for arg in sys.argv]
來(lái)獲取。
- sys.audit(event, *args)?
引發(fā)一個(gè)審計事件并觸發(fā)任何激活的審計鉤子。 event 是一個(gè)用于標識事件的字符串,args 會(huì )包含有關(guān)事件的更多信息的可選參數。 特定事件的參數的數量和類(lèi)型會(huì )被視為是公有的穩定 API 且不應當在版本之間進(jìn)行修改。
例如,有一個(gè)審計事件的名稱(chēng)為
os.chdir
。 此事件具有一個(gè)名為 path 的參數,該參數將包含所請求的新工作目錄。sys.audit()
將調用現有的審計鉤子,傳入事件名稱(chēng)和參數,并將重新引發(fā)來(lái)自任何鉤子的第一個(gè)異常。 通常來(lái)說(shuō),如果有一個(gè)異常被引發(fā),則它不應當被處理且其進(jìn)程應當被盡可能快地終止。 這將允許鉤子實(shí)現來(lái)決定對特定事件要如何反應:它們可以只是將事件寫(xiě)入日志或是通過(guò)引發(fā)異常來(lái)中止操作。鉤子程序由
sys.addaudithook()
或PySys_AddAuditHook()
函數添加。與本函數相等效的原生函數是
PySys_Audit()
,應盡量使用原生函數。參閱 審計事件表 以獲取 CPython 定義的所有審計事件。
3.8 新版功能.
- sys.base_exec_prefix?
在
site.py
運行之前, Python 啟動(dòng)的時(shí)候被設置為跟exec_prefix
同樣的值。如果不是運行在 虛擬環(huán)境 中,兩個(gè)值會(huì )保持相同;如果site.py
發(fā)現處于一個(gè)虛擬環(huán)境中,prefix
和exec_prefix
將會(huì )指向虛擬環(huán)境。然而base_prefix
和base_exec_prefix
將仍然會(huì )指向基礎的 Python 環(huán)境(用來(lái)創(chuàng )建虛擬環(huán)境的 Python 環(huán)境)3.3 新版功能.
- sys.base_prefix?
在
site.py
運行之前, Python 啟動(dòng)的時(shí)候被設置為跟prefix
同樣的值。如果不是運行在 虛擬環(huán)境 中, 兩個(gè)值會(huì )保持相同;如果site.py
發(fā)現處于一個(gè)虛擬環(huán)境中,prefix
和exec_prefix
將會(huì )指向虛擬環(huán)境。然而base_prefix
和base_exec_prefix
將仍然會(huì )指向基礎的 Python 環(huán)境(用來(lái)創(chuàng )建虛擬環(huán)境的 Python 環(huán)境)3.3 新版功能.
- sys.byteorder?
本地字節順序的指示符。在大端序(最高有效位優(yōu)先)操作系統上值為
'big'
,在小端序(最低有效位優(yōu)先)操作系統上為'little'
。
- sys.builtin_module_names?
一個(gè)包含所有被編譯進(jìn) Python 解釋器的模塊的名稱(chēng)的字符串元組。 (此信息無(wú)法通過(guò)任何其他辦法獲取 ---
modules.keys()
僅會(huì )列出導入的模塊。)另請參閱
sys.stdlib_module_names
列表。
- sys.call_tracing(func, args)?
在啟用跟蹤時(shí)調用
func(*args)
來(lái)保存跟蹤狀態(tài),然后恢復跟蹤狀態(tài)。這將從檢查點(diǎn)的調試器調用,以便遞歸地調試其他的一些代碼。
- sys.copyright?
一個(gè)字符串,包含了 Python 解釋器有關(guān)的版權信息
- sys._clear_type_cache()?
清除內部的類(lèi)型緩存。類(lèi)型緩存是為了加速查找方法和屬性的。在調試引用泄漏的時(shí)候調用這個(gè)函數 只會(huì ) 清除不必要的引用。
這個(gè)函數應該只在內部為了一些特定的目的使用。
- sys._current_frames()?
返回一個(gè)字典,存放著(zhù)每個(gè)線(xiàn)程的標識符與(調用本函數時(shí))該線(xiàn)程棧頂的幀(當前活動(dòng)的幀)之間的映射。注意
traceback
模塊中的函數可以在給定某一幀的情況下構建調用堆棧。這對于調試死鎖最有用:本函數不需要死鎖線(xiàn)程的配合,并且只要這些線(xiàn)程的調用棧保持死鎖,它們就是凍結的。在調用本代碼來(lái)檢查棧頂的幀的那一刻,非死鎖線(xiàn)程返回的幀可能與該線(xiàn)程當前活動(dòng)的幀沒(méi)有任何關(guān)系。
這個(gè)函數應該只在內部為了一些特定的目的使用。
引發(fā)一個(gè) 審計事件
sys._current_frames
,沒(méi)有附帶參數。
- sys._current_exceptions()?
返回一個(gè)字典,存放著(zhù)每個(gè)線(xiàn)程的標識與調用此函數時(shí)該線(xiàn)程當前活動(dòng)幀的棧頂異常之間的映射。 如果某個(gè)線(xiàn)程當前未在處理異常,它將不被包括在結果字典中。
這對于靜態(tài)性能分析來(lái)說(shuō)最為有用。
這個(gè)函數應該只在內部為了一些特定的目的使用。
引發(fā)一個(gè) 審計事件
sys._current_exceptions
,不附帶任何參數。
- sys.breakpointhook()?
本鉤子函數由內建函數
breakpoint()
調用。默認情況下,它將進(jìn)入pdb
調試器,但可以將其改為任何其他函數,以選擇使用哪個(gè)調試器。該函數的特征取決于其調用的函數。例如,默認綁定(即
pdb.set_trace()
)不要求提供參數,但可以將綁定換成要求提供附加參數(位置參數/關(guān)鍵字參數)的函數。內建函數breakpoint()
直接將其*args
和**kws
傳入。breakpointhooks()
返回的所有內容都會(huì )從breakpoint()
返回。默認的實(shí)現首先會(huì )查詢(xún)環(huán)境變量
PYTHONBREAKPOINT
。如果將該變量設置為"0"
,則本函數立即返回,表示在斷點(diǎn)處無(wú)操作。如果未設置該環(huán)境變量或將其設置為空字符串,則調用pdb.set_trace()
。否則,此變量應指定要運行的函數,指定函數時(shí)應使用 Python 的點(diǎn)導入命名法,如package.subpackage.module.function
。這種情況下將導入package.subpackage.module
,且導入的模塊必須有一個(gè)名為function()
的可調用對象。該可調用對象會(huì )運行,*args
和**kws
會(huì )傳入,且無(wú)論function()
返回什么,sys.breakpointhook()
都將返回到內建函數breakpoint()
。請注意,如果在導入
PYTHONBREAKPOINT
指定的可調用對象時(shí)出錯,則將報告一個(gè)RuntimeWarning
并忽略斷點(diǎn)。另請注意,如果以編程方式覆蓋
sys.breakpointhook()
,則 不會(huì ) 查詢(xún)PYTHONBREAKPOINT
。3.7 新版功能.
- sys._debugmallocstats()?
將有關(guān) CPython 內存分配器狀態(tài)的底層的信息打印至 stderr。
如果 Python 是 以調試模式編譯的 <debug-build> (
configure --with-pydebug option
),它還會(huì )執行一些消耗性能的內部一致性檢查。3.3 新版功能.
CPython implementation detail: 本函數僅限 CPython。此處沒(méi)有定義確切的輸出格式,且可能會(huì )更改。
- sys.displayhook(value)?
如果 value 不是
None
,則本函數會(huì )將repr(value)
打印至sys.stdout
,并將 value 保存在builtins._
中。如果repr(value)
無(wú)法用sys.stdout.errors
錯誤處理方案(可能為'strict'
)編碼為sys.stdout.encoding
,則用'backslashreplace'
錯誤處理方案將其編碼為sys.stdout.encoding
。在交互式 Python 會(huì )話(huà)中運行 expression 產(chǎn)生結果后,將在結果上調用
sys.displayhook
。若要自定義這些 value 的顯示,可以將sys.displayhook
指定為另一個(gè)單參數函數。偽代碼:
def displayhook(value): if value is None: return # Set '_' to None to avoid recursion builtins._ = None text = repr(value) try: sys.stdout.write(text) except UnicodeEncodeError: bytes = text.encode(sys.stdout.encoding, 'backslashreplace') if hasattr(sys.stdout, 'buffer'): sys.stdout.buffer.write(bytes) else: text = bytes.decode(sys.stdout.encoding, 'strict') sys.stdout.write(text) sys.stdout.write("\n") builtins._ = value
在 3.2 版更改: 在發(fā)生
UnicodeEncodeError
時(shí)使用'backslashreplace'
錯誤處理方案。
- sys.dont_write_bytecode?
如果該值為 true,則 Python 在導入源碼模塊時(shí)將不會(huì )嘗試寫(xiě)入
.pyc
文件。該值會(huì )被初始化為True
或False
,依據是-B
命令行選項和PYTHONDONTWRITEBYTECODE
環(huán)境變量,可以自行設置該值,來(lái)控制是否生成字節碼文件。
- sys._emscripten_info?
A named tuple holding information about the environment on the wasm32-emscripten platform. The named tuple is provisional and may change in the future.
屬性
說(shuō)明
emscripten_version
Emscripten version as tuple of ints (major, minor, micro), e.g.
(3, 1, 8)
.runtime
Runtime string, e.g. browser user agent,
'Node.js v14.18.2'
, or'UNKNOWN'
.pthreads
True
if Python is compiled with Emscripten pthreads support.shared_memory
True
if Python is compiled with shared memory support.Availability: WebAssembly Emscripten platform (wasm32-emscripten).
3.11 新版功能.
- sys.pycache_prefix?
如果將該值設為某個(gè)目錄(不是
None
),Python 會(huì )將字節碼緩存文件.pyc
寫(xiě)入到以該目錄為根的并行目錄樹(shù)中(并從中讀?。?,而不是在源碼樹(shù)中的__pycache__
目錄下讀寫(xiě)。源碼樹(shù)中所有的__pycache__
目錄都將被忽略,并將在 pycache prefix 內寫(xiě)入新的 .pyc 文件。因此,如果使用compileall
作為預構建步驟,則必須確保預構建時(shí)使用的 pycache prefix (如果有)與將來(lái)運行的時(shí)候相同。相對路徑將解釋為相對于當前工作目錄。
該值的初值設置,依據
-X
pycache_prefix=PATH
命令行選項或PYTHONPYCACHEPREFIX
環(huán)境變量的值(命令行優(yōu)先)。如果兩者均未設置,則為None
。3.8 新版功能.
- sys.excepthook(type, value, traceback)?
本函數會(huì )將所給的回溯和異常輸出到
sys.stderr
中。當拋出一個(gè)異常,且未被捕獲時(shí),解釋器將調用
sys.excepthook
并帶有三個(gè)參數:異常類(lèi)、異常實(shí)例和一個(gè)回溯對象。在交互式會(huì )話(huà)中,這會(huì )在控制權返回到提示符之前發(fā)生。在 Python 程序中,這會(huì )在程序退出之前發(fā)生。如果要自定義此類(lèi)頂級異常的處理過(guò)程,可以將另一個(gè) 3 個(gè)參數的函數賦給sys.excepthook
。引發(fā)一個(gè) 審計事件
sys.excepthook
,附帶參數hook
,type
,value
,traceback
。參見(jiàn)
sys.unraisablehook()
函數處理無(wú)法拋出的異常,threading.excepthook()
函數處理threading.Thread.run()
拋出的異常。
- sys.__breakpointhook__?
- sys.__displayhook__?
- sys.__excepthook__?
- sys.__unraisablehook__?
程序開(kāi)始時(shí),這些對象存有
breakpointhook
、displayhook
、excepthook
和unraisablehook
的初始值。保存它們是為了可以在breakpointhook
、displayhook
和excepthook
、unraisablehook
被破壞或被替換時(shí)恢復它們。3.7 新版功能: __breakpointhook__
3.8 新版功能: __unraisablehook__
- sys.exception()?
This function, when called while an exception handler is executing (such as an
except
orexcept*
clause), returns the exception instance that was caught by this handler. When exception handlers are nested within one another, only the exception handled by the innermost handler is accessible.If no exception handler is executing, this function returns
None
.3.11 新版功能.
- sys.exc_info()?
This function returns the old-style representation of the handled exception. If an exception
e
is currently handled (soexception()
would returne
),exc_info()
returns the tuple(type(e), e, e.__traceback__)
. That is, a tuple containing the type of the exception (a subclass ofBaseException
), the exception itself, and a traceback object which typically encapsulates the call stack at the point where the exception last occurred.If no exception is being handled anywhere on the stack, this function return a tuple containing three
None
values.在 3.11 版更改: The
type
andtraceback
fields are now derived from thevalue
(the exception instance), so when an exception is modified while it is being handled, the changes are reflected in the results of subsequent calls toexc_info()
.
- sys.exec_prefix?
一個(gè)字符串,提供特定域的目錄前綴,該目錄中安裝了與平臺相關(guān)的 Python 文件,默認也是
'/usr/local'
。該目錄前綴可以在構建時(shí)使用 configure 腳本的--exec-prefix
參數進(jìn)行設置。具體而言,所有配置文件(如pyconfig.h
頭文件)都安裝在目錄exec_prefix/lib/pythonX.Y/config
中,共享庫模塊安裝在exec_prefix/lib/pythonX.Y/lib-dynload
中,其中 X.Y 是 Python 的版本號,如3.2
。備注
如果在一個(gè) 虛擬環(huán)境 中,那么該值將在
site.py
中被修改,指向虛擬環(huán)境。Python 安裝位置仍然可以用base_exec_prefix
來(lái)獲取。
- sys.executable?
一個(gè)字符串,提供 Python 解釋器的可執行二進(jìn)制文件的絕對路徑,僅在部分系統中此值有意義。如果 Python 無(wú)法獲取其可執行文件的真實(shí)路徑,則
sys.executable
將為空字符串或None
。
- sys.exit([arg])?
Raise a
SystemExit
exception, signaling an intention to exit the interpreter.可選參數 arg 可以是表示退出狀態(tài)的整數(默認為 0),也可以是其他類(lèi)型的對象。如果它是整數,則 shell 等將 0 視為“成功終止”,非零值視為“異常終止”。大多數系統要求該值的范圍是 0--127,否則會(huì )產(chǎn)生不確定的結果。某些系統為退出代碼約定了特定的含義,但通常尚不完善;Unix 程序通常用 2 表示命令行語(yǔ)法錯誤,用 1 表示所有其他類(lèi)型的錯誤。傳入其他類(lèi)型的對象,如果傳入
None
等同于傳入 0,如果傳入其他對象則將其打印至stderr
,且退出代碼為 1。特別地,sys.exit("some error message")
可以在發(fā)生錯誤時(shí)快速退出程序。Since
exit()
ultimately "only" raises an exception, it will only exit the process when called from the main thread, and the exception is not intercepted. Cleanup actions specified by finally clauses oftry
statements are honored, and it is possible to intercept the exit attempt at an outer level.在 3.6 版更改: 在 Python 解釋器捕獲
SystemExit
后,如果在清理中發(fā)生錯誤(如清除標準流中的緩沖數據時(shí)出錯),則退出狀態(tài)碼將變?yōu)?120。
- sys.flags?
具名元組 flags 含有命令行標志的狀態(tài)。這些屬性是只讀的。
attribute -- 屬性
標志
debug
interactive
isolated
optimize
no_user_site
no_site
ignore_environment
verbose
bytes_warning
quiet
hash_randomization
dev_mode
utf8_mode
safe_path
在 3.2 版更改: 為新的
-q
標志添加了quiet
屬性3.2.3 新版功能:
hash_randomization
屬性在 3.3 版更改: 刪除了過(guò)時(shí)的
division_warning
屬性在 3.4 版更改: 為
-I
isolated
標志添加了isolated
屬性。在 3.7 版更改: 為新的 Python 開(kāi)發(fā)模式 添加了
dev_mode
屬性,為新的-X
utf8
標志添加了utf8_mode
屬性。在 3.11 版更改: Added the
safe_path
attribute for-P
option.
- sys.float_info?
一個(gè) 具名元組,存有浮點(diǎn)型的相關(guān)信息。它包含的是關(guān)于精度和內部表示的底層信息。這些值與標準頭文件
float.h
中為 C 語(yǔ)言定義的各種浮點(diǎn)常量對應,詳情請參閱 1999 ISO/IEC C 標準 [C99] 的 5.2.4.2.2 節,'Characteristics of floating types(浮點(diǎn)型的特性)'。attribute -- 屬性
float.h 宏
說(shuō)明
epsilon
DBL_EPSILON
大于 1.0 的最小值和 1.0 之間的差,表示為浮點(diǎn)數
另請參閱
math.ulp()
。dig
DBL_DIG
浮點(diǎn)數可以真實(shí)表示的最大十進(jìn)制數字;見(jiàn)下文
mant_dig
DBL_MANT_DIG
浮點(diǎn)數精度:
radix
基數下的浮點(diǎn)數有效位數DBL_MAX
可表示的最大正浮點(diǎn)數(非無(wú)窮)
max_exp
DBL_MAX_EXP
使得
radix**(e-1)
是可表示的浮點(diǎn)數(非無(wú)窮)的最大整數 emax_10_exp
DBL_MAX_10_EXP
使得
10**e
在可表示的浮點(diǎn)數(非無(wú)窮)范圍內的最大整數 eDBL_MIN
可表示的最小正 規格化 浮點(diǎn)數
使用
math.ulp(0.0)
獲取可表示的最小正 非規格化 浮點(diǎn)數min_exp
DBL_MIN_EXP
使得
radix**(e-1)
是規格化浮點(diǎn)數的最小整數 emin_10_exp
DBL_MIN_10_EXP
使得
10**e
是規格化浮點(diǎn)數的最小整數 eradix
FLT_RADIX
指數表示法中采用的基數
rounds
FLT_ROUNDS
整數常數,表示算術(shù)運算中的舍入方式。它反映了解釋器啟動(dòng)時(shí)系統的 FLT_ROUNDS 宏的值。關(guān)于可能的值及其含義的說(shuō)明,請參閱 C99 標準 5.2.4.2.2 節。
關(guān)于
sys.float_info.dig
屬性的進(jìn)一步說(shuō)明。如果s
是表示十進(jìn)制數的字符串,而該數最多有sys.float_info.dig
位有效數字,則將s
轉換為 float 再轉回去將恢復原先相同十進(jìn)制值的字符串:>>> import sys >>> sys.float_info.dig 15 >>> s = '3.14159265358979' # decimal string with 15 significant digits >>> format(float(s), '.15g') # convert to float and back -> same value '3.14159265358979'
但是對于超過(guò)
sys.float_info.dig
位有效數字的字符串,轉換前后并非總是相同:>>> s = '9876543211234567' # 16 significant digits is too many! >>> format(float(s), '.16g') # conversion changes value '9876543211234568'
- sys.float_repr_style?
一個(gè)字符串,反映
repr()
函數在浮點(diǎn)數上的行為。如果該字符串是'short'
,那么對于(非無(wú)窮的)浮點(diǎn)數x
,repr(x)
將會(huì )生成一個(gè)短字符串,滿(mǎn)足float(repr(x)) == x
的特性。這是 Python 3.1 及更高版本中的常見(jiàn)行為。否則float_repr_style
的值將是'legacy'
,此時(shí)repr(x)
的行為方式將與 Python 3.1 之前的版本相同。3.1 新版功能.
- sys.getallocatedblocks()?
返回解釋器當前已分配的內存塊數,無(wú)論它們大小如何。本函數主要用于跟蹤和調試內存泄漏。因為解釋器有內部緩存,所以不同調用之間結果會(huì )變化??赡苄枰{用
_clear_type_cache()
和gc.collect()
使結果更容易預測。如果當前 Python 構建或實(shí)現無(wú)法合理地計算此信息,允許
getallocatedblocks()
返回 0。3.4 新版功能.
- sys.getdefaultencoding()?
返回當前 Unicode 實(shí)現所使用的默認字符串編碼名稱(chēng)。
- sys.getdlopenflags()?
返回當前
dlopen()
調用所使用的標志位的值。標志值對應的符號名稱(chēng)可以在os
模塊中找到(形如RTLD_xxx
的常量,如os.RTLD_LAZY
)。可用性: Unix。
- sys.getfilesystemencoding()?
獲取 文件系統編碼格式: 與 文件系統錯誤處理句柄 一起使用以便在 Unicode 文件名和字節文件名之間進(jìn)行轉換。 文件系統錯誤處理句柄是由
getfilesystemencoding()
來(lái)返回的。為獲得最佳兼容性,在任何時(shí)候都應使用 str 來(lái)表示文件名,盡管使用 bytes 來(lái)表示文件名也是受支持的。 接受還返回文件名的函數應當支持 str 或 bytes 并在內部將其轉換為系統首選的表示形式。
應使用
os.fsencode()
和os.fsdecode()
來(lái)保證所采用的編碼和錯誤處理方案都是正確的。filesystem encoding and error handler 是在 Python 啟動(dòng)時(shí)通過(guò)
PyConfig_Read()
函數來(lái)配置的:請參閱PyConfig
的filesystem_encoding
和filesystem_errors
等成員。在 3.2 版更改:
getfilesystemencoding()
的結果將不再有可能是None
。在 3.6 版更改: Windows 不再保證會(huì )返回
'mbcs'
。詳情請參閱 PEP 529 和_enablelegacywindowsfsencoding()
。在 3.7 版更改: 返回
'utf-8'
,如果啟用了 Python UTF-8 模式 的話(huà)。
- sys.getfilesystemencodeerrors()?
獲取 文件系統錯誤處理句柄: 該錯誤處理句柄與 文件系統編碼格式 一起使用以便在 Unicode 文件名和字節文件名之間進(jìn)程轉換。 文件系統編碼格式是由
getfilesystemencoding()
來(lái)返回的。應使用
os.fsencode()
和os.fsdecode()
來(lái)保證所采用的編碼和錯誤處理方案都是正確的。filesystem encoding and error handler 是在 Python 啟動(dòng)時(shí)通過(guò)
PyConfig_Read()
函數來(lái)配置的:請參閱PyConfig
的filesystem_encoding
和filesystem_errors
等成員。3.6 新版功能.
- sys.getrefcount(object)?
返回 object 的引用計數。返回的計數通常比預期的多一,因為它包括了作為
getrefcount()
參數的這一次(臨時(shí))引用。
- sys.getrecursionlimit()?
返回當前的遞歸限制值,即 Python 解釋器堆棧的最大深度。此限制可防止無(wú)限遞歸導致的 C 堆棧溢出和 Python 崩潰。該值可以通過(guò)
setrecursionlimit()
設置。
- sys.getsizeof(object[, default])?
返回對象的大?。ㄒ宰止潪閱挝唬?。該對象可以是任何類(lèi)型。所有內建對象返回的結果都是正確的,但對于第三方擴展不一定正確,因為這與具體實(shí)現有關(guān)。
只計算直接分配給對象的內存消耗,不計算它所引用的對象的內存消耗。
對象不提供計算大小的方法時(shí),如果傳入過(guò) default 則返回它,否則拋出
TypeError
異常。如果對象由垃圾回收器管理,則
getsizeof()
將調用對象的__sizeof__
方法,并在上層添加額外的垃圾回收器。可以參考 recursive sizeof recipe 中的示例,關(guān)于遞歸調用
getsizeof()
來(lái)得到各個(gè)容器及其所有內容物的大小。
- sys.getswitchinterval()?
返回解釋器的“線(xiàn)程切換間隔時(shí)間”,請參閱
setswitchinterval()
。3.2 新版功能.
- sys._getframe([depth])?
返回來(lái)自調用棧的一個(gè)幀對象。如果傳入可選整數 depth,則返回從棧頂往下相應調用層數的幀對象。如果該數比調用棧更深,則拋出
ValueError
。depth 的默認值是 0,返回調用棧頂部的幀。引發(fā)一個(gè) 審計事件
sys._getframe
,沒(méi)有附帶參數。CPython implementation detail: 這個(gè)函數應該只在內部為了一些特定的目的使用。不保證它在所有 Python 實(shí)現中都存在。
- sys.getprofile()?
返回由
setprofile()
設置的性能分析函數。
- sys.gettrace()?
返回由
settrace()
設置的跟蹤函數。CPython implementation detail:
gettrace()
函數僅用于實(shí)現調試器,性能分析器,打包工具等。它的行為是實(shí)現平臺的一部分,而不是語(yǔ)言定義的一部分,因此并非在所有 Python 實(shí)現中都可用。
- sys.getwindowsversion()?
返回一個(gè)具名元組,描述當前正在運行的 Windows 版本。元素名稱(chēng)包括 major, minor, build, platform, service_pack, service_pack_minor, service_pack_major, suite_mask, product_type 和 platform_version。service_pack 包含一個(gè)字符串,platform_version 包含一個(gè)三元組,其他所有值都是整數。元素也可以通過(guò)名稱(chēng)來(lái)訪(fǎng)問(wèn),所以
sys.getwindowsversion()[0]
與sys.getwindowsversion().major
是等效的。為保持與舊版本的兼容性,只有前 5 個(gè)元素可以用索引檢索。platform 將會(huì )是
2 (VER_PLATFORM_WIN32_NT)
。product_type 可能是以下值之一:
常量
含意
1 (VER_NT_WORKSTATION)
系統是工作站。
2 (VER_NT_DOMAIN_CONTROLLER)
系統是域控制器。
3 (VER_NT_SERVER)
系統是服務(wù)器,但不是域控制器。
本函數包裝了 Win32
GetVersionEx()
函數,參閱 Microsoft 文檔有關(guān)OSVERSIONINFOEX()
的內容可獲取這些字段的更多信息。platform_version 返回當前操作系統的主要版本、次要版本和編譯版本號,而不是為該進(jìn)程所模擬的版本。 它旨在用于日志記錄而非特性檢測。
備注
platform_version 會(huì )從 kernel32.dll 獲取版本號,這個(gè)版本可能與 OS 版本不同。 請使用
platform
模塊來(lái)獲取準確的 OS 版本號。可用性: Windows。
在 3.2 版更改: 更改為具名元組,添加 service_pack_minor, service_pack_major, suite_mask 和 product_type。
在 3.6 版更改: 添加了 platform_version
- sys.get_asyncgen_hooks()?
返回一個(gè) asyncgen_hooks 對象,該對象類(lèi)似于
namedtuple
,形式為 (firstiter, finalizer),其中 firstiter 和 finalizer 為None
或函數,函數以 異步生成器迭代器 作為參數,并用于在事件循環(huán)中干預異步生成器的終結。3.6 新版功能: 詳情請參閱 PEP 525。
備注
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。
- sys.get_coroutine_origin_tracking_depth()?
獲取由
set_coroutine_origin_tracking_depth()
設置的協(xié)程來(lái)源的追蹤深度。3.7 新版功能.
備注
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
- sys.hash_info?
一個(gè) 具名元組,給出數字類(lèi)型的哈希的實(shí)現參數。關(guān)于數字類(lèi)型的哈希的詳情請參閱 數字類(lèi)型的哈希運算。
attribute -- 屬性
說(shuō)明
width
用于哈希值的位寬度
modulus
用于數字散列方案的素數模數P。
inf
為正無(wú)窮大返回的哈希值
nan
(該屬性已不再被使用)
imag
用于復數虛部的乘數
algorithm
字符串、字節和內存視圖的哈希算法的名稱(chēng)
hash_bits
哈希算法的內部輸出大小。
seed_bits
散列算法的種子密鑰的大小
3.2 新版功能.
在 3.4 版更改: 添加了 algorithm, hash_bits 和 seed_bits
- sys.hexversion?
編碼為單個(gè)整數的版本號。該整數會(huì )確保每個(gè)版本都自增,其中適當包括了未發(fā)布版本。舉例來(lái)說(shuō),要測試 Python 解釋器的版本不低于 1.5.2,請使用:
if sys.hexversion >= 0x010502F0: # use some advanced feature ... else: # use an alternative implementation or warn the user ...
之所以稱(chēng)它為
hexversion
,是因為只有將它傳入內置函數hex()
后,其結果才看起來(lái)有意義。也可以使用 具名元組sys.version_info
,它對相同信息有著(zhù)更人性化的編碼。關(guān)于
hexversion
的更多信息可以在 API 和 ABI 版本管理 中找到。
- sys.implementation?
一個(gè)對象,該對象包含當前運行的 Python 解釋器的實(shí)現信息。所有 Python 實(shí)現中都必須存在下列屬性。
name 是當前實(shí)現的標識符,如
'cpython'
。實(shí)際的字符串由 Python 實(shí)現定義,但保證是小寫(xiě)字母。version 是一個(gè)具名元組,格式與
sys.version_info
相同。它表示 Python 實(shí)現 的版本。 另一個(gè)(由sys.version_info
表示)是當前解釋器遵循的相應 Python 語(yǔ)言 的版本,兩者具有不同的含義。 例如,對于 PyPy 1.8,sys.implementation.version
可能是sys.version_info(1, 8, 0, 'final', 0)
,而sys.version_info
則是sys.version_info(2, 7, 2, 'final', 0)
。對于 CPython 而言?xún)蓚€(gè)值是相同的,因為它是參考實(shí)現。hexversion 是十六進(jìn)制的實(shí)現版本,類(lèi)似于
sys.hexversion
。cache_tag 是導入機制使用的標記,用于已緩存模塊的文件名。按照慣例,它將由實(shí)現的名稱(chēng)和版本組成,如
'cpython-33'
。但如果合適,Python 實(shí)現可以使用其他值。如果cache_tag
被置為None
,表示模塊緩存已禁用。sys.implementation
可能包含相應 Python 實(shí)現的其他屬性。這些非標準屬性必須以下劃線(xiàn)開(kāi)頭,此處不詳細闡述。無(wú)論其內容如何,sys.implementation
在解釋器運行期間或不同實(shí)現版本之間都不會(huì )更改。(但是不同 Python 語(yǔ)言版本間可能會(huì )不同。)詳情請參閱 PEP 421。3.3 新版功能.
備注
新的必要屬性的添加必須經(jīng)過(guò)常規的 PEP 過(guò)程。詳情請參閱 PEP 421。
- sys.int_info?
一個(gè) 具名元組,包含 Python 內部整數表示形式的信息。這些屬性是只讀的。
屬性
說(shuō)明
bits_per_digit
每個(gè)數字占有的位數。Python 內部將整數存儲在基底
2**int_info.bits_per_digit
sizeof_digit
用于表示數字的C類(lèi)型的字節大小
3.1 新版功能.
- sys.__interactivehook__?
當本屬性存在,則以 交互模式 啟動(dòng)解釋器時(shí),將自動(dòng)(不帶參數地)調用本屬性的值。該過(guò)程是在讀取
PYTHONSTARTUP
文件之后完成的,所以可以在該文件中設置這一鉤子。site
模塊 設置了這一屬性。引發(fā)一個(gè) 審計事件
cpython.run_interactivehook
,附帶參數hook
。3.4 新版功能.
- sys.intern(string)?
將 string 插入 "interned" (駐留)字符串表,返回被插入的字符串 -- 它是 string 本身或副本。駐留字符串對提高字典查找的性能很有用 -- 如果字典中的鍵已駐留,且所查找的鍵也已駐留,則鍵(取散列后)的比較可以用指針代替字符串來(lái)比較。通常,Python 程序使用到的名稱(chēng)會(huì )被自動(dòng)駐留,且用于保存模塊、類(lèi)或實(shí)例屬性的字典的鍵也已駐留。
駐留字符串不是永久存在的,對
intern()
返回值的引用必須保留下來(lái),才能發(fā)揮駐留字符串的優(yōu)勢。
- sys.is_finalizing()?
如果 Python 解釋器 正在關(guān)閉 則返回
True
,否則返回False
。3.5 新版功能.
- sys.last_type?
- sys.last_value?
- sys.last_traceback?
這三個(gè)變量并非總是有定義,僅當有異常未處理,且解釋器打印了錯誤消息和堆?;厮輹r(shí),才會(huì )給它們賦值。它們的預期用途,是允許交互中的用戶(hù)導入調試器模塊,進(jìn)行事后調試,而不必重新運行導致錯誤的命令。(通常使用
import pdb; pdb.pm()
進(jìn)入事后調試器,詳情請參閱pdb
模塊。)這些變量的含義與上述
exc_info()
返回值的含義相同。
- sys.maxsize?
一個(gè)整數,表示
Py_ssize_t
類(lèi)型的變量可以取到的最大值。在 32 位平臺上通常為2**31 - 1
,在 64 位平臺上通常為2**63 - 1
。
- sys.maxunicode?
一個(gè)整數,表示最大的 Unicode 碼點(diǎn)值,如
1114111
(十六進(jìn)制為0x10FFFF
)。在 3.3 版更改: 在 PEP 393 之前,
sys.maxunicode
曾是0xFFFF
或0x10FFFF
,具體取決于配置選項,該選項指定將 Unicode 字符存儲為 UCS-2 還是 UCS-4。
- sys.meta_path?
一個(gè)由 元路徑查找器 對象組成的列表,當查找需要導入的模塊時(shí),會(huì )調用這些對象的
find_spec()
方法,觀(guān)察這些對象是否能找到所需模塊。調用find_spec()
方法最少需要傳入待導入模塊的絕對名稱(chēng)。如果待導入模塊包含在一個(gè)包中,則父包的__path__
屬性將作為第二個(gè)參數被傳入。該方法返回 模塊規格,找不到模塊則返回None
。參見(jiàn)
importlib.abc.MetaPathFinder
抽象基類(lèi),定義了
meta_path
內的查找器對象的接口。importlib.machinery.ModuleSpec
find_spec()
返回的實(shí)例所對應的具體類(lèi)。
在 3.4 版更改: 在 Python 3.4 中通過(guò) PEP 451 引入了 模塊規格。早期版本的 Python 會(huì )尋找一個(gè)稱(chēng)為
find_module()
的方法。如果某個(gè)meta_path
條目沒(méi)有find_spec()
方法,就會(huì )回退去調用前一種方法。
- sys.modules?
This is a dictionary that maps module names to modules which have already been loaded. This can be manipulated to force reloading of modules and other tricks. However, replacing the dictionary will not necessarily work as expected and deleting essential items from the dictionary may cause Python to fail. If you want to iterate over this global dictionary always use
sys.modules.copy()
ortuple(sys.modules)
to avoid exceptions as its size may change during iteration as a side effect of code or activity in other threads.
- sys.path?
一個(gè)由字符串組成的列表,用于指定模塊的搜索路徑。初始化自環(huán)境變量
PYTHONPATH
,再加上一條與安裝有關(guān)的默認路徑。By default, as initialized upon program startup, a potentially unsafe path is prepended to
sys.path
(before the entries inserted as a result ofPYTHONPATH
):python -m module
command line: prepend the current working directory.python script.py
command line: prepend the script's directory. If it's a symbolic link, resolve symbolic links.python -c code
andpython
(REPL) command lines: prepend an empty string, which means the current working directory.
To not prepend this potentially unsafe path, use the
-P
command line option or thePYTHONSAFEPATH
environment variable?程序可以隨意修改本列表用于自己的目的。只能向
sys.path
中添加 string 和 bytes 類(lèi)型,其他數據類(lèi)型將在導入期間被忽略。
- sys.path_hooks?
一個(gè)由可調用對象組成的列表,這些對象接受一個(gè)路徑作為參數,并嘗試為該路徑創(chuàng )建一個(gè) 查找器。如果成功創(chuàng )建查找器,則可調用對象將返回它,否則將引發(fā)
ImportError
異常。本特性最早在 PEP 302 中被提及。
- sys.path_importer_cache?
一個(gè)字典,作為 查找器 對象的緩存。key 是傳入
sys.path_hooks
的路徑,value 是相應已找到的查找器。如果路徑是有效的文件系統路徑,但在sys.path_hooks
中未找到查找器,則存入None
。本特性最早在 PEP 302 中被提及。
在 3.3 版更改: 未找到查找器時(shí),改為存儲
None
,而不是imp.NullImporter
。
- sys.platform?
本字符串是一個(gè)平臺標識符,舉例而言,該標識符可用于將特定平臺的組件追加到
sys.path
中。對于 Unix 系統(除 Linux 和 AIX 外),該字符串是 Python 構建時(shí)的
uname -s
返回的小寫(xiě)操作系統名稱(chēng),并附加了uname -r
返回的系統版本的第一部分,如'sunos5'
或'freebsd8'
。除非需要檢測特定版本的系統,否則建議使用以下習慣用法:if sys.platform.startswith('freebsd'): # FreeBSD-specific code here... elif sys.platform.startswith('linux'): # Linux-specific code here... elif sys.platform.startswith('aix'): # AIX-specific code here...
對于其他系統,值是:
系統
平臺
值AIX
'aix'
Emscripten
'emscripten'
Linux
'linux'
WASI
'wasi'
Windows
'win32'
Windows/Cygwin
'cygwin'
macOS
'darwin'
在 3.3 版更改: 在 Linux 上,
sys.platform
將不再包含副版本號。它將總是'linux'
而不是'linux2'
或'linux3'
。由于舊版本的 Python 會(huì )包含該版本號,因此推薦總是使用上述startswith
習慣用法。在 3.8 版更改: 在 AIX 上,
sys.platform
將不再包含副版本號。它將總是'aix'
而不是'aix5'
或'aix7'
。由于舊版本的 Python 會(huì )包含該版本號,因此推薦總是使用上述startswith
習慣用法。
- sys.platlibdir?
平臺專(zhuān)用庫目錄。用于構建標準庫的路徑和已安裝擴展模塊的路徑。
在大多數平臺上,它等同于
"lib"
。在 Fedora 和 SuSE 上,它等同于給出了以下sys.path
路徑的 64 位平臺上的"lib64"
(其中X.Y
是 Python 的major.minor
版本)。/usr/lib64/pythonX.Y/
:標準庫(如os
模塊的os.py
)/usr/lib64/pythonX.Y/lib-dynload/
:標準庫的 C 擴展模塊(如errno
模塊,確切的文件名取決于平臺)/usr/lib/pythonX.Y/site-packages/
(請使用lib
, 而非sys.platlibdir
): 第三方模塊/usr/lib64/pythonX.Y/site-packages/
: 第三方包的 C 擴展模塊
3.9 新版功能.
- sys.prefix?
A string giving the site-specific directory prefix where the platform independent Python files are installed; on Unix, the default is
'/usr/local'
. This can be set at build time with the--prefix
argument to the configure script. See 安裝路徑 for derived paths.備注
如果在一個(gè) 虛擬環(huán)境 中,那么該值將在
site.py
中被修改,指向虛擬環(huán)境。Python 安裝位置仍然可以用base_prefix
來(lái)獲取。
- sys.ps1?
- sys.ps2?
字符串,指定解釋器的首要和次要提示符。僅當解釋器處于交互模式時(shí),它們才有定義。這種情況下,它們的初值為
'>>> '
和'... '
。如果賦給其中某個(gè)變量的是非字符串對象,則每次解釋器準備讀取新的交互式命令時(shí),都會(huì )重新運行該對象的str()
,這可以用來(lái)實(shí)現動(dòng)態(tài)的提示符。
- sys.setdlopenflags(n)?
設置解釋器在調用
dlopen()
時(shí)用到的標志,例如解釋器在加載擴展模塊時(shí)。首先,調用sys.setdlopenflags(0)
將在導入模塊時(shí)對符號啟用惰性解析。要在擴展模塊之間共享符號,請調用sys.setdlopenflags(os.RTLD_GLOBAL)
。標志值的符號名稱(chēng)可以在os
模塊中找到(即RTLD_xxx
常量,如os.RTLD_LAZY
)。可用性: Unix。
- sys.setprofile(profilefunc)?
設置系統的性能分析函數,該函數使得在 Py??thon 中能夠實(shí)現一個(gè) Python 源代碼性能分析器。關(guān)于 Python Profiler 的更多信息請參閱 Python Profilers 分析器 章節。性能分析函數的調用方式類(lèi)似于系統的跟蹤函數(參閱
settrace()
),但它是通過(guò)不同的事件調用的,例如,不是每執行一行代碼就調用它一次(僅在調用某函數和從某函數返回時(shí)才會(huì )調用性能分析函數,但即使某函數發(fā)生異常也會(huì )算作返回事件)。該函數是特定于單個(gè)線(xiàn)程的,但是性能分析器無(wú)法得知線(xiàn)程之間的上下文切換,因此在存在多個(gè)線(xiàn)程的情況下使用它是沒(méi)有意義的。另外,因為它的返回值不會(huì )被用到,所以可以簡(jiǎn)單地返回None
。性能分析函數中的錯誤將導致其自身被解除設置。性能分析函數應接收三個(gè)參數:frame、event 和 arg。frame 是當前的堆棧幀。event 是一個(gè)字符串:
'call'
、'return'
、'c_call'
、'c_return'
或'c_exception'
。arg 取決于事件類(lèi)型。引發(fā)一個(gè) 審計事件
sys.setprofile
,不附帶任何參數。這些事件具有以下含義:
'call'
表示調用了某個(gè)函數(或進(jìn)入了其他的代碼塊)。性能分析函數將被調用,arg 為
None
。'return'
表示某個(gè)函數(或別的代碼塊)即將返回。性能分析函數將被調用,arg 是即將返回的值,如果此次返回事件是由于拋出異常,arg 為
None
。'c_call'
表示即將調用某個(gè) C 函數。它可能是擴展函數或是內建函數。arg 是 C 函數對象。
'c_return'
表示返回了某個(gè) C 函數。arg 是 C 函數對象。
'c_exception'
表示某個(gè) C 函數拋出了異常。arg 是 C 函數對象。
- sys.setrecursionlimit(limit)?
將 Python 解釋器堆棧的最大深度設置為 limit。此限制可防止無(wú)限遞歸導致的 C 堆棧溢出和 Python 崩潰。
不同平臺所允許的最高限值不同。當用戶(hù)有需要深度遞歸的程序且平臺支持更高的限值,可能就需要調高限值。進(jìn)行該操作需要謹慎,因為過(guò)高的限值可能會(huì )導致崩潰。
如果新的限值低于當前的遞歸深度,將拋出
RecursionError
異常。在 3.5.1 版更改: 如果新的限值低于當前的遞歸深度,現在將拋出
RecursionError
異常。
- sys.setswitchinterval(interval)?
設置解釋器的線(xiàn)程切換間隔時(shí)間(單位為秒)。該浮點(diǎn)數決定了“時(shí)間片”的理想持續時(shí)間,時(shí)間片將分配給同時(shí)運行的 Python 線(xiàn)程。請注意,實(shí)際值可能更高,尤其是使用了運行時(shí)間長(cháng)的內部函數或方法時(shí)。同時(shí),在時(shí)間間隔末尾調度哪個(gè)線(xiàn)程是操作系統的決定。解釋器沒(méi)有自己的調度程序。
3.2 新版功能.
- sys.settrace(tracefunc)?
設置系統的跟蹤函數,使得用戶(hù)在 Python 中就可以實(shí)現 Python 源代碼調試器。該函數是特定于單個(gè)線(xiàn)程的,所以要讓調試器支持多線(xiàn)程,必須為正在調試的每個(gè)線(xiàn)程都用
settrace()
注冊一個(gè)跟蹤函數,或使用threading.settrace()
。跟蹤函數應接收三個(gè)參數:frame、event 和 arg。frame 是當前的堆棧幀。event 是一個(gè)字符串:
'call'
、'line'
、'return'
、'exception'
或'opcode'
。arg 取決于事件類(lèi)型。每次進(jìn)入 trace 函數的新的局部作用范圍,都會(huì )調用 trace 函數( event 會(huì )被設置為
'call'
),它應該返回一個(gè)引用,指向即將用在新作用范圍上的局部跟蹤函數;如果不需要跟蹤當前的作用范圍,則返回None
。局部跟蹤函數應返回對自身的引用(或對另一個(gè)函數的引用,用來(lái)在其作用范圍內進(jìn)行進(jìn)一步的跟蹤),或者返回
None
來(lái)停止跟蹤其作用范圍。如果跟蹤函數出錯,則該跟蹤函數將被取消設置,類(lèi)似于調用
settrace(None)
。這些事件具有以下含義:
'call'
表示調用了某個(gè)函數(或進(jìn)入了其他的代碼塊)。全局跟蹤函數將被調用,arg 為
None
。返回值將指定局部跟蹤函數。'line'
表示解釋器即將執行新一行代碼或重新執行循環(huán)條件。局部跟蹤函數將被調用,arg 為
None
,其返回值將指定新的局部跟蹤函數。關(guān)于其工作原理的詳細說(shuō)明,請參見(jiàn)Objects/lnotab_notes.txt
。要在該堆棧幀禁用每行觸發(fā)事件,可以在堆棧幀上將f_trace_lines
設置為False
。'return'
表示某個(gè)函數(或別的代碼塊)即將返回。局部跟蹤函數將被調用,arg 是即將返回的值,如果此次返回事件是由于拋出異常,arg 為
None
。跟蹤函數的返回值將被忽略。'exception'
表示發(fā)生了某個(gè)異常。局部跟蹤函數將被調用,arg 是一個(gè)
(exception, value, traceback)
元組,返回值將指定新的局部跟蹤函數。'opcode'
表示解釋器即將執行一個(gè)新的操作碼(操作碼的詳情請參閱
dis
)。局部跟蹤函數將被調用,arg 為None
,其返回值將指定新的局部跟蹤函數。每操作碼觸發(fā)事件默認情況下都不發(fā)出:必須在堆棧幀上將f_trace_opcodes
顯式地設置為True
來(lái)請求這些事件。
注意,由于異常是在鏈式調用中傳播的,所以每一級都會(huì )產(chǎn)生一個(gè)
'exception'
事件。更細微的用法是,可以顯式地通過(guò)賦值
frame.f_trace = tracefunc
來(lái)設置跟蹤函數,而不是用現有跟蹤函數的返回值去間接設置它。當前幀上的跟蹤函數必須激活,而settrace()
還沒(méi)有做這件事。注意,為了使上述設置起效,必須使用settrace()
來(lái)安裝全局跟蹤函數才能啟用運行時(shí)跟蹤機制,但是它不必與上述是同一個(gè)跟蹤函數(它可以是一個(gè)開(kāi)銷(xiāo)很低的跟蹤函數,只返回None
,即在各個(gè)幀上立即將其自身禁用)。關(guān)于代碼對象和幀對象的更多信息請參考 標準類(lèi)型層級結構。
引發(fā)一個(gè) 審計事件
sys.settrace
,不附帶任何參數。CPython implementation detail:
settrace()
函數僅用于實(shí)現調試器,性能分析器,打包工具等。它的行為是實(shí)現平臺的一部分,而不是語(yǔ)言定義的一部分,因此并非在所有 Python 實(shí)現中都可用。在 3.7 版更改: 添加了
'opcode'
事件類(lèi)型;為幀對象添加了f_trace_lines
和f_trace_opcodes
屬性
- sys.set_asyncgen_hooks(firstiter, finalizer)?
接受兩個(gè)可選的關(guān)鍵字參數,要求它們是可調用對象,且接受一個(gè) 異步生成器迭代器 作為參數。firstiter 對象將在異步生成器第一次迭代時(shí)調用。finalizer 將在異步生成器即將被銷(xiāo)毀時(shí)調用。
引發(fā)一個(gè) 審計事件
sys.set_asyncgen_hooks_firstiter
,不附帶任何參數。引發(fā)一個(gè) 審計事件
sys.set_asyncgen_hooks_finalizer
,不附帶任何參數。之所以會(huì )引發(fā)兩個(gè)審計事件,是因為底層的 API 由兩個(gè)調用組成,每個(gè)調用都須要引發(fā)自己的事件。
3.6 新版功能: 更多詳情請參閱 PEP 525,finalizer 方法的參考示例可參閱 Lib/asyncio/base_events.py 中
asyncio.Loop.shutdown_asyncgens
的實(shí)現。備注
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。
- sys.set_coroutine_origin_tracking_depth(depth)?
用于啟用或禁用協(xié)程溯源。啟用后,協(xié)程對象上的
cr_origin
屬性將包含一個(gè)元組,它由多個(gè)(文件名 filename,行號 line number,函數名 function name)元組組成,整個(gè)元組描述出了協(xié)程對象創(chuàng )建過(guò)程的回溯,元組首端是最近一次的調用。禁用后,cr_origin
將為 None。要啟用,請向 depth 傳遞一個(gè)大于零的值,它指定了有多少幀將被捕獲信息。要禁用,請將 depth 置為零。
該設置是特定于單個(gè)線(xiàn)程的。
3.7 新版功能.
備注
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
- sys._enablelegacywindowsfsencoding()?
將 filesystem encoding and error handler 分別修改為 'mbcs' 和 'replace',以便與 3.6 之前版本的 Python 保持一致。
這等同于在啟動(dòng) Python 前先定義好
PYTHONLEGACYWINDOWSFSENCODING
環(huán)境變量。另請參閱
sys.getfilesystemencoding()
和sys.getfilesystemencodeerrors()
。可用性: Windows。
3.6 新版功能: 更多詳情請參閱 PEP 529。
- sys.stdin?
- sys.stdout?
- sys.stderr?
解釋器用于標準輸入、標準輸出和標準錯誤的 文件對象:
stdin
用于所有交互式輸入(包括對input()
的調用);stdout
用于print()
和 expression 語(yǔ)句的輸出,以及用于input()
的提示符;解釋器自身的提示符和它的錯誤消息都發(fā)往
stderr
。
這些流都是常規 文本文件,與
open()
函數返回的對象一致。它們的參數選擇如下:編碼格式和錯誤處理句柄是由
PyConfig.stdio_encoding
和PyConfig.stdio_errors
來(lái)初始化的。在 Windows 上,控制臺設備使用 UTF-8。 非字符設備如磁盤(pán)文件和管道使用系統語(yǔ)言區域編碼格式(例如 ANSI 代碼頁(yè))。 非控制臺字符設備如 NUL(例如當
isatty()
返回True
時(shí))會(huì )在啟動(dòng)時(shí)分別讓 stdin 和 stdout/stderr 使用控制臺輸入和輸出代碼頁(yè)。 如果進(jìn)程初始化時(shí)沒(méi)有被附加到控制臺則會(huì )使用默認的系統 locale encoding。要重寫(xiě)控制臺的特殊行為,可以在啟動(dòng) Python 前設置 PYTHONLEGACYWINDOWSSTDIO 環(huán)境變量。此時(shí),控制臺代碼頁(yè)將用于其他字符設備。
在所有平臺上,都可以通過(guò)在 Python 啟動(dòng)前設置
PYTHONIOENCODING
環(huán)境變量來(lái)重寫(xiě)字符編碼,或通過(guò)新的-X
utf8
命令行選項和PYTHONUTF8
環(huán)境變量來(lái)設置。但是,對 Windows 控制臺來(lái)說(shuō),上述方法僅在設置了PYTHONLEGACYWINDOWSSTDIO
后才起效。交互模式下,
stdout
流是行緩沖的。其他情況下,它像常規文本文件一樣是塊緩沖的。兩種情況下的stderr
流都是行緩沖的。要使得兩個(gè)流都變成無(wú)緩沖,可以傳入-u
命令行選項或設置PYTHONUNBUFFERED
環(huán)境變量。
在 3.9 版更改: 非交互模式下,
stderr
現在是行緩沖的,而不是全緩沖的。備注
要從標準流寫(xiě)入或讀取二進(jìn)制數據,請使用底層二進(jìn)制
buffer
對象。例如,要將字節寫(xiě)入stdout
,請使用sys.stdout.buffer.write(b'abc')
。但是,如果你在寫(xiě)一個(gè)庫(并且不限制執行庫代碼時(shí)的上下文),那么請注意,標準流可能會(huì )被替換為文件類(lèi)對象,如
io.StringIO
,它們是不支持buffer
屬性的。
- sys.__stdin__?
- sys.__stdout__?
- sys.__stderr__?
程序開(kāi)始時(shí),這些對象存有
stdin
、stderr
和stdout
的初始值。它們在程序結束前都可以使用,且在需要向實(shí)際的標準流打印內容時(shí)很有用,無(wú)論sys.std*
對象是否已重定向。如果實(shí)際文件已經(jīng)被覆蓋成一個(gè)損壞的對象了,那它也可用于將實(shí)際文件還原成能正常工作的文件對象。但是,本過(guò)程的最佳方法應該是,在原來(lái)的流被替換之前就顯式地保存它,并使用這一保存的對象來(lái)還原。
備注
某些情況下的
stdin
、stdout
和stderr
以及初始值__stdin__
、__stdout__
和__stderr__
可以是None
。通常發(fā)生在未連接到控制臺的 Windows GUI app 中,以及在用 pythonw 啟動(dòng)的 Python app 中。
- sys.stdlib_module_names?
一個(gè)包含標準庫模組名稱(chēng)字符串的凍結集合。
它在所有平臺上都保持一致。 在某些平臺上不可用的模塊和在 Python 編譯時(shí)被禁用的模塊也會(huì )被列出。 所有種類(lèi)的模塊都會(huì )被列出:純 Python 模塊、內置模塊、凍結模塊和擴展模塊等。 測試模塊則會(huì )被排除掉。
對于包來(lái)說(shuō),僅會(huì )列出主包:子包和子模塊不會(huì )被列出。 例如,
email
包會(huì )被列出,但email.mime
子包和email.message
子模塊不會(huì )被列出。另請參閱
sys.builtin_module_names
列表。3.10 新版功能.
- sys.thread_info?
一個(gè) 具名元組,包含線(xiàn)程實(shí)現的信息。
屬性
說(shuō)明
name
線(xiàn)程實(shí)現的名稱(chēng):
'nt'
: Windows 線(xiàn)程'pthread'
: POSIX 線(xiàn)程'solaris'
: Solaris 線(xiàn)程
lock
鎖實(shí)現的名稱(chēng):
'semaphore'
: 鎖使用信號量'mutex+cond'
: 鎖使用互斥和條件變量None
如果此信息未知
線(xiàn)程庫的名稱(chēng)和版本。它是一個(gè)字符串,如果此信息未知,則為
None
。3.3 新版功能.
- sys.tracebacklimit?
當該變量值設置為整數,在發(fā)生未處理的異常時(shí),它將決定打印的回溯信息的最大層級數。默認為
1000
。當將其設置為0
或小于 0,將關(guān)閉所有回溯信息,并且只打印異常類(lèi)型和異常值。
- sys.unraisablehook(unraisable, /)?
處理一個(gè)無(wú)法拋出的異常。
它會(huì )在發(fā)生了一個(gè)異常但 Python 沒(méi)有辦法處理時(shí)被調用。例如,當一個(gè)析構器引發(fā)了異常,或在垃圾回收 (
gc.collect()
) 期間引發(fā)了異常。unraisable 參數具有以下屬性:
exc_type: 異常類(lèi)型
exc_value: 異常值,可以是
None
.exc_traceback: 異?;厮?,可以是
None
.err_msg: 錯誤信息,可以是
None
.object: 導致異常的對象,可以為
None
.
默認的鉤子程序會(huì )將 err_msg 和 object 格式化為:
f'{err_msg}: {object!r}'
;如果 err_msg 為None
則采用 "Exception ignored in" 錯誤信息。要改變無(wú)法拋出的異常的處理過(guò)程,可以重寫(xiě)
sys.unraisablehook()
。使用定制鉤子存放 exc_value 可能會(huì )創(chuàng )建引用循環(huán)。 它應當在不再需要異常時(shí)被顯式地清空以打破引用循環(huán)。
如果一個(gè) object 正在被銷(xiāo)毀,那么使用自定義的鉤子儲存該對象可能會(huì )將其復活。請在自定義鉤子生效后避免儲存 object,以避免對象的復活。
另請參閱
excepthook()
,它處理未捕獲的異常。引發(fā)一個(gè)審計事件
sys.unraisablehook
并附帶參數hook
,unraisable
。3.8 新版功能.
- sys.version?
一個(gè)包含 Python 解釋器版本號加編譯版本號以及所用編譯器等額外信息的字符串。 此字符串會(huì )在交互式解釋器啟動(dòng)時(shí)顯示。 請不要從中提取版本信息,而應當使用
version_info
以及platform
模塊所提供的函數。
- sys.api_version?
這個(gè)解釋器的 C API 版本。當你在調試 Python及期擴展模板的版本沖突這個(gè)功能非常有用。
- sys.version_info?
一個(gè)包含版本號五部分的元組: major, minor, micro, releaselevel 和 serial。 除 releaselevel 外的所有值均為整數;發(fā)布級別值則為
'alpha'
,'beta'
,'candidate'
或'final'
。 對應于 Python 版本 2.0 的version_info
值為(2, 0, 0, 'final', 0)
。 這些部分也可按名稱(chēng)訪(fǎng)問(wèn),因此sys.version_info[0]
就等價(jià)于sys.version_info.major
,依此類(lèi)推。在 3.1 版更改: 增加了以名稱(chēng)表示的各部分屬性。
- sys.winver?
用于在 Windows 平臺上組成注冊表鍵的版本號。 這在 Python DLL 中存儲為 1000 號字符串資源。 其值通常是
version
的頭三個(gè)字符。 它在sys
模塊中提供是為了信息展示目的;修改此值不會(huì )影響 Python 所使用的注冊表鍵。可用性: Windows。
- sys._xoptions?
一個(gè)字典,包含通過(guò)
-X
命令行選項傳遞的旗標,這些旗標專(zhuān)屬于各種具體實(shí)現。選項名稱(chēng)將會(huì )映射到對應的值(如果顯式指定)或者True
。例如:$ ./python -Xpycache_prefix=some_path -Xdev Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys._xoptions {'pycache_prefix': 'some_path', 'dev': True}
CPython implementation detail: 這是 CPython 專(zhuān)屬的訪(fǎng)問(wèn)通過(guò)
-X
傳遞的選項的方式。 其他實(shí)現可能會(huì )通過(guò)其他方式導出它們,或者完全不導出。3.2 新版功能.
引用
- C99
ISO/IEC 9899:1999. "Programming languages -- C." 該標準的公開(kāi)草案可從 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf獲得。