sys — 系統相關引數和函式


該模組提供對直譯器使用或維護的一些變數的訪問,以及與直譯器強烈互動的函式。它始終可用。

sys.abiflags

在 Python 使用標準 configure 指令碼構建的 POSIX 系統上,此變數包含 PEP 3149 指定的 ABI 標誌。

3.2 版本加入。

在 3.8 版本中更改: 預設標誌變為空字串(已刪除 pymalloc 的 m 標誌)。

可用性:Unix。

sys.addaudithook(hook)

將可呼叫物件 hook 追加到當前(子)直譯器的活動審計鉤子列表中。

當透過 sys.audit() 函式引發審計事件時,每個鉤子將按照新增的順序被呼叫,並帶有事件名稱和引數元組。由 PySys_AddAuditHook() 新增的本機鉤子將首先被呼叫,然後是當前(子)直譯器中新增的鉤子。然後,鉤子可以記錄事件,引發異常以中止操作,或完全終止程序。

請注意,審計鉤子主要用於收集有關內部或以其他方式無法觀察到的操作的資訊,無論是由 Python 還是由 Python 編寫的庫執行。它們不適合用於實現“沙箱”。特別是,惡意程式碼可以很容易地停用或繞過使用此函式新增的鉤子。至少,任何安全敏感的鉤子都必須在使用 C API PySys_AddAuditHook() 初始化執行時之前新增,並且任何允許任意記憶體修改的模組(如 ctypes)都應完全刪除或密切監視。

呼叫 sys.addaudithook() 本身將引發一個名為 sys.addaudithook 的審計事件,且沒有引數。如果任何現有鉤子引發源自 RuntimeError 的異常,則不會新增新鉤子,並且會抑制異常。因此,呼叫方無法假定已新增其鉤子,除非它們控制所有現有鉤子。

有關 CPython 引發的所有事件,請參閱 審計事件表,以及 PEP 578 中關於原始設計討論的內容。

3.8 版本加入。

在 3.8.1 版本中更改: 不再抑制源自 Exception 但不是 RuntimeError 的異常。

CPython 實現細節: 啟用跟蹤時(請參閱 settrace()),只有當可呼叫物件具有設定為 true 值的 __cantrace__ 成員時,才會跟蹤 Python 鉤子。否則,跟蹤函式將跳過鉤子。

sys.argv

傳遞給 Python 指令碼的命令列引數列表。argv[0] 是指令碼名稱(這是否是完整路徑名取決於作業系統)。如果使用直譯器的 -c 命令列選項執行命令,則 argv[0] 設定為字串 '-c'。如果未將指令碼名稱傳遞給 Python 直譯器,則 argv[0] 是空字串。

要迴圈訪問標準輸入或命令列上給出的檔案列表,請參閱 fileinput 模組。

另請參閱 sys.orig_argv

註解

在 Unix 上,命令列引數由作業系統以位元組形式傳遞。Python 使用檔案系統編碼和“surrogateescape”錯誤處理程式對其進行解碼。當您需要原始位元組時,可以透過 [os.fsencode(arg) for arg in sys.argv] 獲取。

sys.audit(event, *args)

引發審計事件並觸發任何活動的審計鉤子。event 是標識事件的字串,args 可以包含有關事件的更多可選引數。給定事件的引數數量和型別被認為是公共且穩定的 API,並且不應在版本之間進行修改。

例如,一個審計事件名為 os.chdir。此事件有一個名為 path 的引數,該引數將包含請求的新工作目錄。

sys.audit() 將呼叫現有的審計鉤子,傳遞事件名稱和引數,並將重新引發來自任何鉤子的第一個異常。通常,如果引發異常,則不應處理該異常,並且應儘快終止程序。這允許鉤子實現決定如何響應特定事件:它們可以僅記錄事件或透過引發異常來中止操作。

使用 sys.addaudithook()PySys_AddAuditHook() 函式新增鉤子。

此函式的本機等效項是 PySys_Audit()。如果可能,最好使用本機函式。

有關 CPython 引發的所有事件,請參閱 審計事件表

3.8 版本加入。

sys.base_exec_prefix

在 Python 啟動期間,在執行 site.py 之前,設定為與 exec_prefix 相同的值。如果不是在虛擬環境中執行,則這些值將保持不變;如果 site.py 發現正在使用虛擬環境,則 prefixexec_prefix 的值將更改為指向虛擬環境,而 base_prefixbase_exec_prefix 將保持指向基礎 Python 安裝(建立虛擬環境所用的那個)。

3.3 版本中新增。

sys.base_prefix

在 Python 啟動期間,在執行 site.py 之前,設定為與 prefix 相同的值。如果不是在虛擬環境中執行,則這些值將保持不變;如果 site.py 發現正在使用虛擬環境,則 prefixexec_prefix 的值將更改為指向虛擬環境,而 base_prefixbase_exec_prefix 將保持指向基礎 Python 安裝(建立虛擬環境所用的那個)。

3.3 版本中新增。

sys.byteorder

本機位元組順序的指示符。在大端(最高有效位元組在前)平臺上,此值將為 'big',在小端(最低有效位元組在前)平臺上,此值將為 'little'

sys.builtin_module_names

一個包含編譯到此 Python 直譯器中的所有模組名稱的字串元組。(此資訊無法透過其他方式獲得 - modules.keys() 僅列出匯入的模組。)

另請參見 sys.stdlib_module_names 列表。

sys.call_tracing(func, args)

在啟用跟蹤時呼叫 func(*args)。跟蹤狀態會被儲存,然後在之後恢復。此功能旨在從檢查點由偵錯程式呼叫,以遞迴除錯或分析其他程式碼。

在呼叫由 settrace()setprofile() 設定的跟蹤函式時,會暫停跟蹤,以避免無限遞迴。call_tracing() 允許跟蹤函式的顯式遞迴。

sys.copyright

一個包含與 Python 直譯器相關的版權資訊的字串。

sys._clear_type_cache()

清除內部型別快取。型別快取用於加速屬性和方法查詢。在引用洩漏除錯期間使用此函式來刪除不必要的引用。

此函式應僅用於內部和特殊用途。

自 3.13 版本起已棄用: 請改用更通用的 _clear_internal_caches() 函式。

sys._clear_internal_caches()

清除所有與內部效能相關的快取。在查詢洩漏時使用此函式來釋放不必要的引用和記憶體塊。

3.13 版本中新增。

sys._current_frames()

返回一個字典,將每個執行緒的識別符號對映到該函式被呼叫時該執行緒中當前處於活動狀態的最頂層堆疊幀。請注意,traceback 模組中的函式可以使用這樣的幀構建呼叫堆疊。

這對於除錯死鎖最有用:此函式不需要死鎖執行緒的協作,並且這些執行緒的呼叫堆疊在其保持死鎖狀態時會被凍結。對於非死鎖執行緒返回的幀,在呼叫程式碼檢查該幀時可能與該執行緒的當前活動沒有任何關係。

此函式應僅用於內部和特殊用途。

引發一個沒有引數的 審計事件 sys._current_frames

sys._current_exceptions()

返回一個字典,將每個執行緒的識別符號對映到該函式被呼叫時該執行緒中當前處於活動狀態的最頂層異常。如果執行緒當前未處理異常,則不會包含在結果字典中。

這對於統計分析最有用。

此函式應僅用於內部和特殊用途。

引發一個沒有引數的 審計事件 sys._current_exceptions

在 3.12 版本中更改: 字典中的每個值現在都是單個異常例項,而不是像從 sys.exc_info() 返回的 3 元組。

sys.breakpointhook()

此鉤子函式由內建的 breakpoint() 呼叫。預設情況下,它會讓你進入 pdb 偵錯程式,但可以將其設定為任何其他函式,以便你可以選擇使用哪個偵錯程式。

此函式的簽名取決於它呼叫的內容。例如,預設繫結(例如 pdb.set_trace())不期望任何引數,但你可能會將其繫結到期望其他引數(位置引數和/或關鍵字引數)的函式。內建的 breakpoint() 函式會直接傳遞其 *args**kwsbreakpointhooks() 返回的任何內容都會從 breakpoint() 返回。

預設實現首先會查詢環境變數 PYTHONBREAKPOINT。如果該變數設定為 "0",則此函式立即返回;即它是一個空操作。如果環境變數未設定,或者設定為空字串,則會呼叫 pdb.set_trace()。否則,該變數應該命名一個要執行的函式,使用 Python 的點式匯入命名法,例如 package.subpackage.module.function。在這種情況下,會匯入 package.subpackage.module,並且生成的模組必須具有一個名為 function() 的可呼叫物件。這將執行,傳入 *args**kws,並且無論 function() 返回什麼,sys.breakpointhook() 都會將其返回給內建的 breakpoint() 函式。

請注意,如果在匯入 PYTHONBREAKPOINT 所命名的可呼叫物件時出現任何錯誤,則會報告一個 RuntimeWarning,並且斷點會被忽略。

另請注意,如果 sys.breakpointhook() 被以程式設計方式覆蓋,則 不會 查詢 PYTHONBREAKPOINT

3.7 版本中新增。

sys._debugmallocstats()

向 stderr 列印有關 CPython 記憶體分配器狀態的底層資訊。

如果 Python 是在除錯模式下構建的(configure --with-pydebug option),它還會執行一些耗時的內部一致性檢查。

3.3 版本中新增。

CPython 實現細節:此函式特定於 CPython。此處未定義確切的輸出格式,並且可能會發生更改。

sys.dllhandle

指定 Python DLL 控制代碼的整數。

可用性:Windows。

sys.displayhook(value)

如果 value 不是 None,此函式將 repr(value) 列印到 sys.stdout,並將 value 儲存在 builtins._ 中。如果 repr(value) 不能使用 sys.stdout.errors 錯誤處理程式(可能為 'strict')編碼為 sys.stdout.encoding,則使用 'backslashreplace' 錯誤處理程式將其編碼為 sys.stdout.encoding

在互動式 Python 會話中輸入的表示式的計算結果上呼叫 sys.displayhook。可以透過為 sys.displayhook 分配另一個單引數函式來自定義這些值的顯示。

虛擬碼

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 版本中更改: UnicodeEncodeError 上使用 'backslashreplace' 錯誤處理程式。

sys.dont_write_bytecode

如果此項為真,則 Python 不會在匯入源模組時嘗試寫入 .pyc 檔案。此值最初設定為 TrueFalse,具體取決於 -B 命令列選項和 PYTHONDONTWRITEBYTECODE 環境變數,但您可以自行設定它來控制位元組碼檔案的生成。

sys._emscripten_info

一個 命名元組,其中包含有關 wasm32-emscripten 平臺上環境的資訊。命名元組是臨時的,將來可能會更改。

_emscripten_info.emscripten_version

Emscripten 版本,為整數元組(主版本號、次版本號、微版本號),例如 (3, 1, 8)

_emscripten_info.runtime

執行時字串,例如瀏覽器使用者代理、 'Node.js v14.18.2''UNKNOWN'

_emscripten_info.pthreads

如果 Python 是使用 Emscripten pthreads 支援編譯的,則為 True

_emscripten_info.shared_memory

如果 Python 是使用共享記憶體支援編譯的,則為 True

可用性:Emscripten。

3.11 版本中新增。

sys.pycache_prefix

如果設定了此項(不是 None),則 Python 會將位元組碼快取 .pyc 檔案寫入(並從中讀取)以此目錄為根的並行目錄樹,而不是從原始碼樹中的 __pycache__ 目錄讀取。原始碼樹中的任何 __pycache__ 目錄都將被忽略,並且新的 .pyc 檔案將寫入 pycache 字首內。因此,如果將 compileall 用作預構建步驟,則必須確保以與執行時將使用的 pycache 字首(如果有)相同的字首執行它。

相對路徑是相對於當前工作目錄解釋的。

此值最初是根據 -X pycache_prefix=PATH 命令列選項或 PYTHONPYCACHEPREFIX 環境變數的值設定的(命令列優先)。如果兩者均未設定,則為 None

3.8 版本加入。

sys.excepthook(type, value, traceback)

此函式將給定的回溯和異常列印到 sys.stderr

當丟擲除 SystemExit 之外的異常且未被捕獲時,直譯器會呼叫 sys.excepthook,並傳入三個引數:異常類、異常例項和一個回溯物件。在互動式會話中,這會在控制權返回到提示符之前發生;在 Python 程式中,這會在程式退出之前發生。可以透過為 sys.excepthook 分配另一個三引數函式來自定義這種頂層異常的處理方式。

當發生未捕獲的異常時,會引發一個審計事件 sys.excepthook,引數為 hooktypevaluetraceback。如果沒有設定鉤子,則 hook 可能為 None。如果任何鉤子引發了派生自 RuntimeError 的異常,則對該鉤子的呼叫將被抑制。否則,審計鉤子異常將被報告為不可引發,並且將呼叫 sys.excepthook

另請參閱

sys.unraisablehook() 函式處理不可引發的異常,threading.excepthook() 函式處理由 threading.Thread.run() 引發的異常。

sys.__breakpointhook__
sys.__displayhook__
sys.__excepthook__
sys.__unraisablehook__

這些物件包含程式啟動時 breakpointhookdisplayhookexcepthookunraisablehook 的原始值。儲存它們是為了在 breakpointhookdisplayhookexcepthookunraisablehook 恰好被替換為損壞或替代物件時,能夠恢復它們。

3.7 版本新增: __breakpointhook__

3.8 版本新增: __unraisablehook__

sys.exception()

當在異常處理程式(例如 exceptexcept* 子句)執行時呼叫此函式時,它會返回此處理程式捕獲的異常例項。當異常處理程式相互巢狀時,只有最內層處理程式處理的異常才可訪問。

如果沒有正在執行的異常處理程式,則此函式返回 None

3.11 版本中新增。

sys.exc_info()

此函式返回已處理異常的舊式表示形式。如果當前正在處理異常 e(因此 exception() 將返回 e),exc_info() 將返回元組 (type(e), e, e.__traceback__)。也就是說,一個包含異常型別(BaseException 的子類)、異常本身以及一個 回溯物件 的元組,該回溯物件通常封裝了異常最後發生時的呼叫堆疊。

如果堆疊上的任何位置都沒有正在處理的異常,則此函式返回一個包含三個 None 值的元組。

在 3.11 版本中更改: typetraceback 欄位現在從 value(異常例項)派生,因此當在處理異常時修改異常時,更改會反映在隨後對 exc_info() 的呼叫結果中。

sys.exec_prefix

一個字串,給出安裝平臺相關的 Python 檔案的特定於站點的目錄字首;預設情況下,這也是 '/usr/local'。這可以在構建時使用 configure 指令碼的 --exec-prefix 引數進行設定。具體來說,所有配置檔案(例如 pyconfig.h 標頭檔案)都安裝在目錄 exec_prefix/lib/pythonX.Y/config 中,共享庫模組安裝在 exec_prefix/lib/pythonX.Y/lib-dynload 中,其中 *X.Y* 是 Python 的版本號,例如 3.2

註解

如果 虛擬環境 生效,則此值將在 site.py 中更改以指向虛擬環境。Python 安裝的值仍然可以透過 base_exec_prefix 獲得。

sys.executable

一個字串,給出 Python 直譯器的可執行二進位制檔案的絕對路徑,在系統允許的情況下。如果 Python 無法檢索到其可執行檔案的真實路徑,則 sys.executable 將是一個空字串或 None

sys.exit([arg])

引發 SystemExit 異常,表示退出直譯器的意圖。

可選引數 *arg* 可以是一個整數,給出退出狀態(預設為零),或者另一種型別的物件。如果它是一個整數,零被認為是“成功終止”,任何非零值都被 shell 等視為“異常終止”。大多數系統要求它在 0-127 範圍內,否則會產生未定義的結果。某些系統有一個為特定退出程式碼分配特定含義的約定,但這些約定通常不完善;Unix 程式通常使用 2 表示命令列語法錯誤,使用 1 表示所有其他型別的錯誤。如果傳遞另一種型別的物件,None 等同於傳遞零,任何其他物件都會列印到 stderr 並導致退出程式碼為 1。特別是,sys.exit("some error message") 是在發生錯誤時快速退出程式的一種方法。

由於 exit() 最終“僅僅”引發一個異常,它只會在從主執行緒呼叫且異常未被攔截時才會退出程序。 try 語句的 finally 子句指定的清理操作會被執行,並且有可能在外部層級攔截退出嘗試。

在 3.6 版本中更改: 如果 Python 直譯器捕獲 SystemExit 之後,在清理過程中發生錯誤(例如,重新整理標準流中緩衝的資料時發生錯誤),則退出狀態會更改為 120。

sys.flags

命名元組 flags 公開了命令列標誌的狀態。 這些屬性是隻讀的。

flags.debug

-d

flags.inspect

-i

flags.interactive

-i

flags.isolated

-I

flags.optimize

-O-OO

flags.dont_write_bytecode

-B

flags.no_user_site

-s

flags.no_site

-S

flags.ignore_environment

-E

flags.verbose

-v

flags.bytes_warning

-b

flags.quiet

-q

flags.hash_randomization

-R

flags.dev_mode

-X dev (Python 開發模式)

flags.utf8_mode

-X utf8

flags.safe_path

-P

flags.int_max_str_digits

-X int_max_str_digits (整數轉換為字串的長度限制)

flags.warn_default_encoding

-X warn_default_encoding

在 3.2 版本中更改: 為新的 -q 標誌添加了 quiet 屬性。

在 3.2.3 版本中新增: hash_randomization 屬性。

在 3.3 版本中更改: 移除了過時的 division_warning 屬性。

在 3.4 版本中更改: -I isolated 標誌添加了 isolated 屬性。

在 3.7 版本中更改: 為新的 Python 開發模式 添加了 dev_mode 屬性,併為新的 -X utf8 標誌添加了 utf8_mode 屬性。

在 3.10 版本中更改: -X warn_default_encoding 標誌添加了 warn_default_encoding 屬性。

在 3.11 版本中更改: -P 選項添加了 safe_path 屬性。

在 3.11 版本中更改: 添加了 int_max_str_digits 屬性。

sys.float_info

一個 命名元組,其中包含有關浮點型別的資訊。它包含關於精度和內部表示的底層資訊。這些值對應於 'C' 程式語言的標準標頭檔案 float.h 中定義的各種浮點常量;有關詳細資訊,請參閱 1999 ISO/IEC C 標準 [C99] 的 5.2.4.2.2 節“浮點型別的特性”。

float_info 命名元組 的屬性

屬性

float.h 宏

解釋

float_info.epsilon

DBL_EPSILON

1.0 和大於 1.0 且可以表示為浮點數的最小數值之間的差值。

另請參閱 math.ulp()

float_info.dig

DBL_DIG

可以在浮點數中忠實表示的最大十進位制位數;請參見下文。

float_info.mant_dig

DBL_MANT_DIG

浮點精度:浮點數的有效數中基數-radix 的位數。

float_info.max

DBL_MAX

可表示的最大正有限浮點數。

float_info.max_exp

DBL_MAX_EXP

使得 radix**(e-1) 是可表示的有限浮點數的最大整數 e

float_info.max_10_exp

DBL_MAX_10_EXP

使得 10**e 在可表示的有限浮點數範圍內的最大整數 e

float_info.min

DBL_MIN

可表示的最小正 *標準化* 浮點數。

使用 math.ulp(0.0) 獲取最小的正 *非標準化* 可表示浮點數。

float_info.min_exp

DBL_MIN_EXP

使得 radix**(e-1) 是一個標準化浮點數的最小整數 e

float_info.min_10_exp

DBL_MIN_10_EXP

使得 10**e 是一個標準化浮點數的最小整數 e

float_info.radix

FLT_RADIX

指數表示的基數。

float_info.rounds

FLT_ROUNDS

一個整數,表示浮點算術的舍入模式。 這反映瞭解釋器啟動時系統 FLT_ROUNDS 宏的值。

  • -1: 無法確定

  • 0: 向零取整

  • 1: 向最接近的整數取整

  • 2: 向正無窮取整

  • 3: 向負無窮取整

對於 FLT_ROUNDS 的所有其他值,都表示實現定義的舍入行為。

屬性 sys.float_info.dig 需要進一步解釋。如果 s 是任何表示十進位制數的字串,其有效位數最多為 sys.float_info.dig,那麼將 s 轉換為浮點數後再轉換回字串,將恢復表示相同十進位制值的字串。

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

但是,對於有效位數超過 sys.float_info.dig 的字串,情況並非總是如此。

>>> s = '9876543211234567'    # 16 significant digits is too many!
>>> format(float(s), '.16g')  # conversion changes value
'9876543211234568'
sys.float_repr_style

一個字串,指示 repr() 函式如何處理浮點數。如果字串的值為 'short',那麼對於有限浮點數 xrepr(x) 的目標是生成一個短字串,該字串具有 float(repr(x)) == x 的屬性。這是 Python 3.1 及更高版本中的通常行為。否則,float_repr_style 的值為 'legacy',並且 repr(x) 的行為與 Python 3.1 之前的版本相同。

在 3.1 版本中加入。

sys.getallocatedblocks()

返回直譯器當前分配的記憶體塊的數量,無論其大小如何。此函式主要用於跟蹤和除錯記憶體洩漏。由於直譯器的內部快取,結果可能因呼叫而異;您可能需要呼叫 _clear_internal_caches()gc.collect() 以獲得更可預測的結果。

如果 Python 構建或實現無法合理計算此資訊,則允許 getallocatedblocks() 返回 0。

在 3.4 版本中加入。

sys.getunicodeinternedsize()

返回已被駐留的 Unicode 物件數量。

在 3.12 版本中加入。

sys.getandroidapilevel()

以整數形式返回 Android 的構建時 API 級別。這表示此 Python 構建可以執行的 Android 的最低版本。有關執行時版本資訊,請參閱 platform.android_ver()

可用性:Android。

3.7 版本中新增。

sys.getdefaultencoding()

返回 Unicode 實現當前使用的預設字串編碼的名稱。

sys.getdlopenflags()

返回用於 dlopen() 呼叫的標誌的當前值。標誌值的符號名稱可以在 os 模組中找到(RTLD_xxx 常量,例如 os.RTLD_LAZY)。

可用性:Unix。

sys.getfilesystemencoding()

獲取檔案系統編碼:與檔案系統錯誤處理程式一起使用的編碼,用於在 Unicode 檔名和位元組檔名之間進行轉換。檔案系統錯誤處理程式從 getfilesystemencodeerrors() 返回。

為了獲得最佳相容性,在所有情況下都應將 str 用於檔名,儘管也支援將檔案名錶示為位元組。接受或返回檔名的函式應支援 str 或位元組,並在內部轉換為系統的首選表示形式。

應使用 os.fsencode()os.fsdecode() 以確保使用正確的編碼和錯誤模式。

檔案系統編碼和錯誤處理程式在 Python 啟動時由 PyConfig_Read() 函式配置:請參閱 filesystem_encodingfilesystem_errors PyConfig 的成員。

在 3.2 版本中更改: getfilesystemencoding() 的結果不能再為 None

在 3.6 版本中更改: 不再保證 Windows 返回 'mbcs'。有關更多資訊,請參閱 PEP 529_enablelegacywindowsfsencoding()

在 3.7 版本中更改: 如果啟用了Python UTF-8 模式,則返回 'utf-8'

sys.getfilesystemencodeerrors()

獲取檔案系統錯誤處理程式:與檔案系統編碼一起使用的錯誤處理程式,用於在 Unicode 檔名和位元組檔名之間進行轉換。檔案系統編碼從 getfilesystemencoding() 返回。

應使用 os.fsencode()os.fsdecode() 以確保使用正確的編碼和錯誤模式。

檔案系統編碼和錯誤處理程式在 Python 啟動時由 PyConfig_Read() 函式配置:請參閱 filesystem_encodingfilesystem_errors PyConfig 的成員。

在 3.6 版本中加入。

sys.get_int_max_str_digits()

返回 整數字符串轉換長度限制的當前值。另請參閱 set_int_max_str_digits()

3.11 版本中新增。

sys.getrefcount(object)

返回 *object* 的引用計數。返回的計數通常比您預期的要高 1,因為它包括作為 getrefcount() 引數的(臨時)引用。

請注意,返回的值可能實際上並不反映實際持有物件的引用數量。例如,某些物件是不朽的,並且具有非常高的引用計數,這並不反映實際的引用數量。因此,不要依賴返回的值是準確的,除了值 0 或 1 之外。

在 3.12 版本中更改: 不朽的物件具有非常大的引用計數,這與物件的實際引用數量不匹配。

sys.getrecursionlimit()

返回遞迴限制的當前值,即 Python 直譯器堆疊的最大深度。此限制可防止無限遞迴導致 C 堆疊溢位並使 Python 崩潰。可以透過 setrecursionlimit() 設定此限制。

sys.getsizeof(object[, default])

返回一個物件的大小,以位元組為單位。物件可以是任何型別的物件。所有內建物件都會返回正確的結果,但這對於第三方擴充套件不一定成立,因為它與實現有關。

僅計算直接歸因於物件的記憶體消耗,而不計算其引用的物件的記憶體消耗。

如果給定 default,則當物件沒有提供檢索大小的方法時,將返回該值。否則,將引發 TypeError 異常。

getsizeof() 呼叫物件的 __sizeof__ 方法,如果物件由垃圾收集器管理,則還會加上額外的垃圾收集器開銷。

有關遞迴使用 getsizeof() 來查詢容器及其所有內容大小的示例,請參閱 遞迴 sizeof 食譜

sys.getswitchinterval()

返回直譯器的“執行緒切換間隔”;請參閱 setswitchinterval()

3.2 版本加入。

sys._getframe([depth])

從呼叫堆疊返回一個幀物件。如果給定可選整數 depth,則返回堆疊頂部以下那麼多呼叫的幀物件。如果深度超過呼叫堆疊,則引發 ValueError 異常。depth 的預設值為零,返回呼叫堆疊頂部的幀。

引發一個 審計事件 sys._getframe,其引數為 frame

CPython 實現細節: 此函式僅應用於內部和專門用途。不能保證它存在於所有 Python 實現中。

sys._getframemodulename([depth])

從呼叫堆疊返回模組的名稱。如果給定可選整數 depth,則返回堆疊頂部以下那麼多呼叫的模組。如果深度超過呼叫堆疊,或者如果模組無法識別,則返回 Nonedepth 的預設值為零,返回呼叫堆疊頂部的模組。

引發一個 審計事件 sys._getframemodulename,其引數為 depth

CPython 實現細節: 此函式僅應用於內部和專門用途。不能保證它存在於所有 Python 實現中。

sys.getobjects(limit[, type])

僅當 CPython 使用專門的配置選項 --with-trace-refs 構建時,此函式才存在。它僅用於除錯垃圾回收問題。

返回最多 limit 個動態分配的 Python 物件的列表。如果給定 type,則僅包含該精確型別(而不是子型別)的物件。

列表中的物件不安全使用。具體來說,結果將包括來自所有共享其物件分配器狀態的直譯器的物件(即,使用 PyInterpreterConfig.use_main_obmalloc 設定為 1 或使用 Py_NewInterpreter() 建立的,以及主直譯器)。混合來自不同直譯器的物件可能會導致崩潰或其他意外行為。

CPython 實現細節: 此函式僅應用於專門用途。不能保證它存在於所有 Python 實現中。

在 3.13.1 版本中更改: 結果可能包含來自其他直譯器的物件。

sys.getprofile()

獲取由 setprofile() 設定的效能分析器函式。

sys.gettrace()

獲取由 settrace() 設定的跟蹤函式。

CPython 實現細節: gettrace() 函式僅用於實現偵錯程式、效能分析器、覆蓋工具等。其行為是實現平臺的一部分,而不是語言定義的一部分,因此可能並非在所有 Python 實現中都可用。

sys.getwindowsversion()

返回一個命名元組,描述當前執行的 Windows 版本。命名元素為 majorminorbuildplatformservice_packservice_pack_minorservice_pack_majorsuite_maskproduct_typeplatform_versionservice_pack 包含一個字串,platform_version 包含一個 3 元組,所有其他值都是整數。這些元件也可以透過名稱訪問,因此 sys.getwindowsversion()[0] 等效於 sys.getwindowsversion().major。為了與以前的版本相容,只能透過索引檢索前 5 個元素。

platform 將為 2 (VER_PLATFORM_WIN32_NT)。

product_type 可以是以下值之一

常量

含義

1 (VER_NT_WORKSTATION)

系統是工作站。

2 (VER_NT_DOMAIN_CONTROLLER)

系統是域控制器。

3 (VER_NT_SERVER)

系統是伺服器,但不是域控制器。

此函式包裝了 Win32 GetVersionEx() 函式;有關這些欄位的更多資訊,請參閱 Microsoft 文件中的 OSVERSIONINFOEX()

platform_version 返回當前作業系統的主要版本、次要版本和構建號,而不是為程序模擬的版本。它旨在用於日誌記錄,而不是用於功能檢測。

註解

platform_version 從 kernel32.dll 派生版本,該版本可能與作業系統版本不同。請使用 platform 模組以獲得準確的作業系統版本。

可用性:Windows。

在 3.2 版本中更改: 更改為命名元組,並添加了 service_pack_minorservice_pack_majorsuite_maskproduct_type

在 3.6 版本中更改: 添加了 platform_version

sys.get_asyncgen_hooks()

返回一個 asyncgen_hooks 物件,該物件類似於 namedtuple 的形式 (firstiter, finalizer),其中 firstiterfinalizer 預計為 None 或函式,它們接受一個 非同步生成器迭代器 作為引數,並用於透過事件迴圈計劃非同步生成器的最終化。

在 3.6 版本中新增: 有關更多詳細資訊,請參閱 PEP 525

註解

此函式是在臨時基礎上新增的(有關詳細資訊,請參閱 PEP 411。)

sys.get_coroutine_origin_tracking_depth()

獲取由 set_coroutine_origin_tracking_depth() 設定的當前協程來源跟蹤深度。

3.7 版本中新增。

註解

此函式是在臨時基礎上新增的(有關詳細資訊,請參閱 PEP 411。)僅將其用於除錯目的。

sys.hash_info

一個具名元組,提供數值雜湊實現的引數。關於數值型別的雜湊的更多詳細資訊,請參閱數值型別的雜湊

hash_info.width

用於雜湊值的位元寬度

hash_info.modulus

用於數值雜湊方案的素數模數 P

hash_info.inf

為正無窮返回的雜湊值

hash_info.nan

(此屬性不再使用)

hash_info.imag

用於複數虛部的乘數

hash_info.algorithm

用於字串、位元組和記憶體檢視雜湊的演算法名稱

hash_info.hash_bits

雜湊演算法的內部輸出大小

hash_info.seed_bits

雜湊演算法的種子金鑰的大小

3.2 版本加入。

在 3.4 版本中變更: 添加了 algorithmhash_bitsseed_bits

sys.hexversion

版本號編碼為單個整數。保證每個版本都會增加,包括對非生產版本的正確支援。例如,要測試 Python 直譯器是否至少為 1.5.2 版本,請使用

if sys.hexversion >= 0x010502F0:
    # use some advanced feature
    ...
else:
    # use an alternative implementation or warn the user
    ...

這被稱為 hexversion,因為它只有在將其傳遞給內建的 hex() 函式時才真正有意義。具名元組 sys.version_info 可用於以更友好的方式編碼相同的資訊。

有關 hexversion 的更多詳細資訊,請參見 API 和 ABI 版本控制

sys.implementation

一個包含有關當前正在執行的 Python 直譯器的實現資訊的物件。以下屬性必須存在於所有 Python 實現中。

name 是實現的識別符號,例如 'cpython'。實際的字串由 Python 實現定義,但保證為小寫。

version 是一個具名元組,格式與 sys.version_info 相同。它表示 Python 實現的版本。這與當前執行的直譯器所符合的特定 Python 語言的版本具有不同的含義,而 sys.version_info 表示的是 Python 語言的版本。例如,對於 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,它們的值相同,因為它是參考實現。

hexversion 是十六進位制格式的實現版本,如 sys.hexversion

cache_tag 是匯入機制在快取模組的檔名中使用的標籤。按照慣例,它將是實現的名稱和版本的組合,如 'cpython-33'。但是,如果合適,Python 實現可以使用其他值。如果 cache_tag 設定為 None,則表示應停用模組快取。

sys.implementation 可能包含特定於 Python 實現的其他屬性。這些非標準屬性必須以下劃線開頭,並且此處未描述。無論其內容如何,sys.implementation 在直譯器的執行期間或實現版本之間都不會更改。(但是,它可能會在 Python 語言版本之間更改。)有關更多資訊,請參見 PEP 421

3.3 版本中新增。

註解

新增新的必需屬性必須經過正常的 PEP 流程。有關更多資訊,請參見 PEP 421

sys.int_info

一個具名元組,其中包含有關 Python 的整數內部表示的資訊。這些屬性是隻讀的。

int_info.bits_per_digit

每個數字中包含的位元數。Python 整數在內部以 2**int_info.bits_per_digit 為底儲存。

int_info.sizeof_digit

用於表示數字的 C 型別的大小(以位元組為單位)。

int_info.default_max_str_digits

當未以其他方式顯式配置時,sys.get_int_max_str_digits() 的預設值。

int_info.str_digits_check_threshold

sys.set_int_max_str_digits()PYTHONINTMAXSTRDIGITS-X int_max_str_digits 的最小非零值。

在 3.1 版本中加入。

在 3.11 版本中變更: 添加了 default_max_str_digitsstr_digits_check_threshold

sys.__interactivehook__

當此屬性存在時,當直譯器在互動模式下啟動時,會自動呼叫其值(不帶引數)。這是在讀取 PYTHONSTARTUP 檔案之後完成的,因此您可以在那裡設定此鉤子。site 模組 設定此項

當在啟動時呼叫鉤子時,會使用鉤子物件作為引數引發 審計事件 cpython.run_interactivehook

在 3.4 版本中加入。

sys.intern(string)

string 輸入到“interned”字串的表中,並返回 interned 字串 —— 它是 string 本身或副本。interned 字串對於在字典查詢中獲得一點效能很有用 —— 如果字典中的鍵是 interned 的,並且查詢鍵是 interned 的,則鍵比較(在雜湊之後)可以透過指標比較而不是字串比較來完成。通常,Python 程式中使用的名稱會自動 interned,並且用於儲存模組、類或例項屬性的字典具有 interned 鍵。

Interned 字串不是不朽的;您必須保留對 intern() 返回值的引用才能從中受益。

sys._is_gil_enabled()

如果 True 啟用 GIL,則返回 True,如果停用,則返回 False

3.13 版本中新增。

sys.is_finalizing()

如果主 Python 直譯器正在 關閉,則返回 True。 否則返回 False

另請參見 PythonFinalizationError 異常。

在 3.5 版本中新增。

sys.last_exc

此變數並非始終定義;當異常未被處理且直譯器列印錯誤訊息和堆疊回溯時,它會設定為異常例項。其目的是允許互動式使用者匯入偵錯程式模組並進行事後除錯,而無需重新執行導致錯誤的命令。(典型的用法是 import pdb; pdb.pm() 進入事後偵錯程式;有關更多資訊,請參見 pdb 模組。)

在 3.12 版本中加入。

sys._is_interned(string)

如果給定的字串是“interned”的,則返回 True,否則返回 False

3.13 版本中新增。

CPython 實現細節: 它不保證存在於 Python 的所有實現中。

sys.last_type
sys.last_value
sys.last_traceback

這三個變數已棄用;請改用 sys.last_exc。它們儲存了從上面的 exc_info() 返回的 sys.last_exc 的舊錶示形式。

sys.maxsize

一個整數,給出 Py_ssize_t 型別變數可以採用的最大值。在 32 位平臺上通常是 2**31 - 1,在 64 位平臺上是 2**63 - 1

sys.maxunicode

一個整數,給出最大 Unicode 程式碼點的值,即 1114111 (十六進位制中的 0x10FFFF)。

在 3.3 版本中更改: PEP 393 之前,sys.maxunicode 要麼是 0xFFFF,要麼是 0x10FFFF,具體取決於指定 Unicode 字元是儲存為 UCS-2 還是 UCS-4 的配置選項。

sys.meta_path

一個 元路徑查詢器 物件的列表,這些物件呼叫它們的 find_spec() 方法,以檢視其中一個物件是否可以找到要匯入的模組。預設情況下,它包含實現 Python 預設匯入語義的條目。find_spec() 方法至少使用要匯入的模組的絕對名稱呼叫。如果要匯入的模組包含在包中,則父包的 __path__ 屬性將作為第二個引數傳入。該方法返回一個 模組規範,如果找不到該模組,則返回 None

另請參閱

importlib.abc.MetaPathFinder

定義 meta_path 上查詢器物件介面的抽象基類。

importlib.machinery.ModuleSpec

find_spec() 應該返回其例項的具體類。

在 3.4 版本中更改: 模組規範 在 Python 3.4 中由 PEP 451 引入。

在 3.12 版本中更改: 如果 meta_path 條目沒有 find_spec() 方法,則刪除查詢 find_module() 方法的回退。

sys.modules

這是一個將模組名稱對映到已載入模組的字典。可以對其進行操作以強制重新載入模組和其他技巧。但是,替換字典不一定會按預期工作,並且從字典中刪除基本項可能會導致 Python 失敗。如果你想迭代這個全域性字典,請始終使用 sys.modules.copy()tuple(sys.modules) 來避免異常,因為它的在迭代過程中,大小可能會因其他執行緒中的程式碼或活動而發生變化。

sys.orig_argv

傳遞給 Python 可執行檔案的原始命令列引數的列表。

sys.orig_argv 的元素是 Python 直譯器的引數,而 sys.argv 的元素是使用者程式的引數。直譯器本身使用的引數將出現在 sys.orig_argv 中,而在 sys.argv 中缺失。

在 3.10 版本中新增。

sys.path

一個字串列表,用於指定模組的搜尋路徑。從環境變數 PYTHONPATH 以及依賴於安裝的預設值初始化。

預設情況下,在程式啟動時初始化,一個可能不安全的路徑會新增到 sys.path 的開頭(在作為 PYTHONPATH 的結果插入的條目之前

  • python -m module 命令列:將當前工作目錄新增到開頭。

  • 命令列 python script.py:會把指令碼所在的目錄新增到路徑中。如果它是符號連結,則會解析符號連結。

  • 命令列 python -c codepython (REPL):會新增一個空字串,這意味著當前工作目錄。

為了不新增這個可能不安全的路徑,請使用 -P 命令列選項或 PYTHONSAFEPATH 環境變數。

程式可以自由地修改此列表以用於自己的目的。只有字串應該被新增到 sys.path 中;所有其他資料型別在匯入時會被忽略。

另請參閱

  • 模組 site 描述瞭如何使用 .pth 檔案來擴充套件 sys.path

sys.path_hooks

一個可呼叫物件的列表,它接受一個路徑引數來嘗試為該路徑建立一個 finder。如果可以建立 finder,則由可呼叫物件返回,否則引發 ImportError

最初在 PEP 302 中指定。

sys.path_importer_cache

一個字典,充當 finder 物件的快取。鍵是傳遞給 sys.path_hooks 的路徑,值是找到的 finder。如果路徑是有效的檔案系統路徑,但在 sys.path_hooks 上沒有找到 finder,則儲存 None

最初在 PEP 302 中指定。

sys.platform

一個包含平臺識別符號的字串。已知的值有

系統

platform

AIX

'aix'

Android

'android'

Emscripten

'emscripten'

iOS

'ios'

Linux

'linux'

macOS

'darwin'

Windows

'win32'

Windows/Cygwin

'cygwin'

WASI

'wasi'

在表中未列出的 Unix 系統上,該值是由 uname -s 返回的作業系統名稱的小寫形式,並附加由 uname -r 返回的版本的第一部分,例如 'sunos5''freebsd8'在構建 Python 時。除非你想測試特定的系統版本,否則建議使用以下習慣用法

if sys.platform.startswith('freebsd'):
    # FreeBSD-specific code here...

在 3.3 版本中變更: 在 Linux 上,sys.platform 不再包含主版本號。它始終為 'linux',而不是 'linux2''linux3'

在 3.8 版本中變更: 在 AIX 上,sys.platform 不再包含主版本號。它始終為 'aix',而不是 'aix5''aix7'

在 3.13 版本中變更: 在 Android 上,sys.platform 現在返回 'android' 而不是 'linux'

另請參閱

os.name 的粒度更粗。os.uname() 提供系統相關的版本資訊。

platform 模組提供了對系統身份的詳細檢查。

sys.platlibdir

特定於平臺的庫目錄的名稱。它用於構建標準庫的路徑和已安裝的擴充套件模組的路徑。

在大多數平臺上,它等於 "lib"。在 Fedora 和 SuSE 上,它在 64 位平臺上等於 "lib64",這給出了以下 sys.path 路徑(其中 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

一個字串,給出平臺無關的 Python 檔案安裝的特定於站點的目錄字首;在 Unix 上,預設值為 /usr/local。這可以在構建時使用 --prefix 引數設定給 configure 指令碼。有關派生路徑,請參閱 安裝路徑

註解

如果 虛擬環境 生效,則此值將在 site.py 中更改,以指向虛擬環境。Python 安裝的值仍然可以透過 base_prefix 獲得。

sys.ps1
sys.ps2

字串,指定直譯器的主要和次要提示符。只有當直譯器處於互動模式時才定義這些值。在這種情況下,它們的初始值是 '>>> ''... '。如果將非字串物件分配給任一變數,則每次直譯器準備讀取新的互動式命令時都會重新評估其 str();這可用於實現動態提示符。

sys.setdlopenflags(n)

設定直譯器用於 dlopen() 呼叫的標誌,例如當直譯器載入擴充套件模組時。 除此之外,如果呼叫為 sys.setdlopenflags(0),這將啟用在匯入模組時延遲解析符號。 要在擴充套件模組之間共享符號,請呼叫為 sys.setdlopenflags(os.RTLD_GLOBAL)。 標誌值的符號名稱可以在 os 模組中找到 (RTLD_xxx 常量,例如 os.RTLD_LAZY)。

可用性:Unix。

sys.set_int_max_str_digits(maxdigits)

設定此直譯器使用的 整數字符串轉換長度限制。 另請參閱 get_int_max_str_digits()

3.11 版本中新增。

sys.setprofile(profilefunc)

設定系統的效能分析函式,允許你在 Python 中實現 Python 原始碼的效能分析器。有關 Python 效能分析器的更多資訊,請參閱 Python 效能分析器 一章。系統性能分析函式的呼叫方式類似於系統跟蹤函式(請參閱 settrace()),但它的呼叫事件不同,例如,它不會為執行的每一行程式碼呼叫(僅在呼叫和返回時呼叫,但即使已設定異常,也會報告返回事件)。該函式是執行緒特定的,但效能分析器無法知道執行緒之間的上下文切換,因此在存在多個執行緒的情況下使用它沒有意義。此外,它的返回值不被使用,因此它可以簡單地返回 None。效能分析函式中的錯誤會導致其自身被取消設定。

註解

settrace() 一樣,setprofile() 也使用相同的跟蹤機制。若要在跟蹤函式(例如在偵錯程式斷點中)內使用 setprofile() 跟蹤呼叫,請參閱 call_tracing()

效能分析函式應具有三個引數:frameeventargframe 是當前堆疊幀。event 是一個字串:'call''return''c_call''c_return''c_exception'arg 取決於事件型別。

這些事件的含義如下:

'call'

呼叫一個函式(或進入其他程式碼塊)。呼叫效能分析函式;argNone

'return'

一個函式(或其他程式碼塊)即將返回。呼叫效能分析函式;arg 是將要返回的值,如果事件是由引發的異常引起的,則為 None

'c_call'

即將呼叫一個 C 函式。這可能是擴充套件函式或內建函式。arg 是 C 函式物件。

'c_return'

C 函式已返回。arg 是 C 函式物件。

'c_exception'

C 函式引發了一個異常。arg 是 C 函式物件。

引發一個 審計事件 sys.setprofile,不帶任何引數。

sys.setrecursionlimit(limit)

將 Python 直譯器堆疊的最大深度設定為 limit。此限制可防止無限遞迴導致 C 堆疊溢位並使 Python 崩潰。

可能的最大限制取決於平臺。當用戶有一個需要深度遞迴且平臺支援更高限制的程式時,可能需要設定更高的限制。這應該謹慎進行,因為過高的限制可能導致崩潰。

如果當前遞迴深度的新限制過低,則會引發 RecursionError 異常。

在 3.5.1 版本中更改: 如果當前遞迴深度的新限制過低,則現在會引發 RecursionError 異常。

sys.setswitchinterval(interval)

設定直譯器的執行緒切換間隔(以秒為單位)。此浮點值確定分配給併發執行的 Python 執行緒的“時間片”的理想持續時間。請注意,實際值可能會更高,尤其是在使用長時間執行的內部函式或方法時。此外,在間隔結束時排程哪個執行緒由作業系統決定。直譯器沒有自己的排程器。

3.2 版本加入。

sys.settrace(tracefunc)

設定系統的跟蹤函式,允許你在 Python 中實現 Python 原始碼偵錯程式。該函式是執行緒特定的;為了使偵錯程式支援多個執行緒,它必須使用 settrace() 為每個正在除錯的執行緒註冊跟蹤函式,或者使用 threading.settrace()

跟蹤函式應具有三個引數:frameeventargframe 是當前堆疊幀。event 是一個字串:'call''line''return''exception''opcode'arg 取決於事件型別。

每當進入新的本地作用域時,都會呼叫跟蹤函式(event 設定為 'call');它應該返回一個用於新作用域的本地跟蹤函式的引用,或者如果作用域不應被跟蹤,則返回 None

本地跟蹤函式應返回對其自身的引用,或返回另一個函式的引用,該函式隨後將用作作用域的本地跟蹤函式。

如果跟蹤函式中發生任何錯誤,它將被取消設定,就像呼叫 settrace(None) 一樣。

註解

在呼叫跟蹤函式時停用跟蹤(例如,由 settrace() 設定的函式)。對於遞迴跟蹤,請參閱 call_tracing()

這些事件的含義如下:

'call'

呼叫一個函式(或進入其他程式碼塊)。呼叫全域性跟蹤函式;argNone;返回值指定本地跟蹤函式。

'line'

直譯器即將執行新的一行程式碼或重新執行迴圈的條件。呼叫本地跟蹤函式;argNone;返回值指定新的本地跟蹤函式。有關其工作原理的詳細說明,請參閱 Objects/lnotab_notes.txt。透過將 f_trace_lines 設定為 False,可以停用該 的逐行事件。

'return'

一個函式(或其他程式碼塊)即將返回。呼叫本地跟蹤函式;arg 是將要返回的值,如果事件是由引發的異常引起的,則為 None。跟蹤函式的返回值被忽略。

'exception'

發生了一個異常。呼叫本地跟蹤函式;arg 是一個元組 (exception, value, traceback);返回值指定新的本地跟蹤函式。

'opcode'

直譯器即將執行新的操作碼(有關操作碼詳細資訊,請參閱 dis)。呼叫本地跟蹤函式;argNone;返回值指定新的本地跟蹤函式。預設情況下不發出逐操作碼事件:必須透過將該 上的 f_trace_opcodes 設定為 True 來顯式請求它們。

請注意,當異常向下傳播到呼叫者鏈時,每個級別都會生成一個 'exception' 事件。

為了更細粒度的使用,可以透過顯式地賦值 frame.f_trace = tracefunc 來設定跟蹤函式,而不是依賴於透過已安裝的跟蹤函式的返回值間接設定。這也需要在當前幀上啟用跟蹤函式,而 settrace() 不會這樣做。請注意,為了使此方法生效,必須使用 settrace() 安裝全域性跟蹤函式,以啟用執行時跟蹤機制,但它不需要是同一個跟蹤函式(例如,它可以是一個低開銷的跟蹤函式,該函式在每個幀上簡單地返回 None 以立即停用自身)。

有關程式碼和幀物件的更多資訊,請參閱 標準型別層級結構

引發不帶任何引數的 審計事件 sys.settrace

CPython 實現細節: settrace() 函式僅用於實現偵錯程式、效能分析器、覆蓋率工具等。它的行為是實現平臺的一部分,而不是語言定義的一部分,因此可能並非在所有 Python 實現中都可用。

在 3.7 版本中變更: 添加了 'opcode' 事件型別;向幀添加了 f_trace_linesf_trace_opcodes 屬性

sys.set_asyncgen_hooks([firstiter] [, finalizer])

接受兩個可選的關鍵字引數,它們是可呼叫物件,接受一個 非同步生成器迭代器 作為引數。當非同步生成器首次被迭代時,將呼叫 firstiter 可呼叫物件。當非同步生成器即將被垃圾回收時,將呼叫 finalizer 可呼叫物件。

引發不帶任何引數的 審計事件 sys.set_asyncgen_hooks_firstiter

引發不帶任何引數的 審計事件 sys.set_asyncgen_hooks_finalizer

由於底層 API 由兩個呼叫組成,每個呼叫都必須引發自己的事件,因此會引發兩個審計事件。

3.6 版本中新增:有關更多詳細資訊,請參閱 PEP 525 ,有關 finalizer 方法的參考示例,請參閱 Lib/asyncio/base_events.pyasyncio.Loop.shutdown_asyncgens 的實現

註解

此函式已在臨時基礎上新增(有關詳細資訊,請參閱 PEP 411。)

sys.set_coroutine_origin_tracking_depth(depth)

允許啟用或停用協程來源跟蹤。啟用後,協程物件的 cr_origin 屬性將包含一個元組,其中包含 (檔名、行號、函式名稱) 元組,描述建立協程物件的回溯,最近的呼叫在前。停用後,cr_origin 將為 None

要啟用,請傳遞一個大於零的 depth 值;這將設定將捕獲其資訊的幀數。要停用,請將 depth 設定為零。

此設定是執行緒特定的。

3.7 版本中新增。

註解

此函式已在臨時基礎上新增(有關詳細資訊,請參閱 PEP 411。)僅將其用於除錯目的。

sys.activate_stack_trampoline(backend, /)

啟用堆疊分析器 trampoline backend。唯一支援的後端是 "perf"

可用性:Linux。

在 3.12 版本中加入。

sys.deactivate_stack_trampoline()

停用當前的堆疊分析器 trampoline 後端。

如果沒有啟用堆疊分析器,則此函式無效。

可用性:Linux。

在 3.12 版本中加入。

sys.is_stack_trampoline_active()

如果堆疊分析器 trampoline 處於活動狀態,則返回 True

可用性:Linux。

在 3.12 版本中加入。

sys._enablelegacywindowsfsencoding()

檔案系統編碼和錯誤處理程式 分別更改為 'mbcs' 和 'replace',以與 3.6 之前的 Python 版本保持一致。

這等效於在啟動 Python 之前定義 PYTHONLEGACYWINDOWSFSENCODING 環境變數。

另請參閱 sys.getfilesystemencoding()sys.getfilesystemencodeerrors()

可用性:Windows。

註解

在 Python 啟動後更改檔案系統編碼是危險的,因為舊的 fsencoding 或由舊的 fsencoding 編碼的路徑可能會快取在某個地方。請改用 PYTHONLEGACYWINDOWSFSENCODING

3.6 版本中新增:有關更多詳細資訊,請參閱 PEP 529

自 3.13 版本起已棄用,將在 3.16 版本中刪除:請改用 PYTHONLEGACYWINDOWSFSENCODING

sys.stdin
sys.stdout
sys.stderr

直譯器用於標準輸入、輸出和錯誤的 檔案物件

  • stdin 用於所有互動式輸入(包括對 input() 的呼叫);

  • stdout 用於 print()表示式 語句的輸出以及 input() 的提示;

  • 直譯器自己的提示及其錯誤訊息將傳送到 stderr

這些流是常規的 文字檔案,類似於 open() 函式返回的檔案。它們的引數按如下方式選擇

  • 編碼和錯誤處理程式是從 PyConfig.stdio_encodingPyConfig.stdio_errors 初始化。

    在 Windows 上,UTF-8 用於控制檯裝置。非字元裝置(如磁碟檔案和管道)使用系統區域設定編碼(即 ANSI 內碼表)。非控制檯字元裝置(如 NUL,即 isatty() 返回 True 的情況)在啟動時分別使用控制檯輸入和輸出內碼表的值,分別用於 stdin 和 stdout/stderr。如果程序最初未附加到控制檯,則預設為系統 區域設定編碼

    可以透過在啟動 Python 之前設定環境變數 PYTHONLEGACYWINDOWSSTDIO 來覆蓋控制檯的特殊行為。在這種情況下,控制檯內碼表將像任何其他字元裝置一樣使用。

    在所有平臺上,您可以透過在啟動 Python 之前設定 PYTHONIOENCODING 環境變數,或使用新的 -X utf8 命令列選項和 PYTHONUTF8 環境變數來覆蓋字元編碼。但是,對於 Windows 控制檯,這僅在還設定了 PYTHONLEGACYWINDOWSSTDIO 時適用。

  • 當互動式使用時,stdout 流是行緩衝的。否則,它像常規文字檔案一樣是塊緩衝的。stderr 流在這兩種情況下都是行緩衝的。您可以透過傳遞 -u 命令列選項或設定 PYTHONUNBUFFERED 環境變數來使這兩個流都不緩衝。

在 3.9 版本中更改: 非互動式的 stderr 現在是行緩衝的,而不是完全緩衝的。

註解

要從標準流寫入或讀取二進位制資料,請使用底層二進位制 buffer 物件。例如,要將位元組寫入 stdout,請使用 sys.stdout.buffer.write(b'abc')

但是,如果您正在編寫一個庫(並且不控制其程式碼將在哪個上下文中執行),請注意標準流可能會被替換為類似檔案的物件,例如 io.StringIO,它們不支援 buffer 屬性。

sys.__stdin__
sys.__stdout__
sys.__stderr__

這些物件包含程式啟動時 stdinstderrstdout 的原始值。它們在最終化期間使用,並且無論 sys.std* 物件是否被重定向,都可以用於列印到實際的標準流。

如果它們已被損壞的物件覆蓋,也可以用於將實際檔案恢復為已知的工作檔案物件。但是,執行此操作的首選方法是在替換流之前顯式儲存先前的流,並恢復儲存的物件。

註解

在某些條件下,stdinstdoutstderr 以及原始值 __stdin____stdout____stderr__ 可以為 None。這通常發生在未連線到控制檯的 Windows GUI 應用程式和使用 pythonw 啟動的 Python 應用程式中。

sys.stdlib_module_names

一個凍結的字串集合,其中包含標準庫模組的名稱。

它在所有平臺上都相同。還列出了在某些平臺上不可用的模組以及在 Python 構建時停用的模組。列出了所有模組型別:純 Python 模組、內建模組、凍結模組和擴充套件模組。測試模組被排除在外。

對於包,僅列出主包:不列出子包和子模組。例如,列出 email 包,但不列出 email.mime 子包和 email.message 子模組。

另請參閱 sys.builtin_module_names 列表。

在 3.10 版本中新增。

sys.thread_info

一個 命名元組,其中包含有關執行緒實現的資訊。

thread_info.name

執行緒實現的名稱

  • "nt":Windows 執行緒

  • "pthread":POSIX 執行緒

  • "pthread-stubs":存根 POSIX 執行緒(在沒有執行緒支援的 WebAssembly 平臺上)

  • "solaris":Solaris 執行緒

thread_info.lock

鎖實現的名稱

  • "semaphore":鎖使用訊號量

  • "mutex+cond":鎖使用互斥鎖和條件變數

  • 如果此資訊未知,則為 None

thread_info.version

執行緒庫的名稱和版本。它是一個字串,如果此資訊未知,則為 None

3.3 版本中新增。

sys.tracebacklimit

當此變數設定為整數值時,它確定發生未處理異常時列印的回溯資訊的最大級別數。預設值為 1000。當設定為 0 或更小時,所有回溯資訊都將被抑制,僅列印異常型別和值。

sys.unraisablehook(unraisable, /)

處理無法引發的異常。

當發生異常但 Python 無法處理時呼叫。例如,當解構函式引發異常或在垃圾回收期間 (gc.collect())。

unraisable 引數具有以下屬性

  • exc_type:異常型別。

  • exc_value:異常值,可以為 None

  • exc_traceback:異常回溯,可以為 None

  • err_msg:錯誤訊息,可以為 None

  • object:導致異常的物件,可以為 None

預設鉤子將 err_msgobject 格式化為:f'{err_msg}: {object!r}';如果 err_msgNone,則使用“Exception ignored in”錯誤訊息。

可以覆蓋 sys.unraisablehook() 來控制如何處理無法引發的異常。

另請參閱

excepthook() 處理未捕獲的異常。

警告

使用自定義鉤子儲存 exc_value 可能會建立引用迴圈。當不再需要異常時,應顯式清除它以打破引用迴圈。

使用自定義鉤子儲存 object 可能會在將其設定為正在被最終化的物件時復活它。避免在自定義鉤子完成後儲存 object,以避免復活物件。

當發生無法處理的異常時,使用引數 hook, unraisable 引發審計事件 sys.unraisablehookunraisable 物件與將傳遞給鉤子的物件相同。如果未設定鉤子,則 hook 可能為 None

3.8 版本加入。

sys.version

一個包含 Python 直譯器版本號以及構建號和所用編譯器附加資訊的字串。當啟動互動式直譯器時會顯示此字串。不要從中提取版本資訊,而應使用 version_info 以及 platform 模組提供的函式。

sys.api_version

此直譯器的 C API 版本。當除錯 Python 和擴充套件模組之間的版本衝突時,程式設計師可能會發現此屬性很有用。

sys.version_info

一個包含版本號五個組成部分的元組:majorminormicroreleaselevelserial。除了 releaselevel 之外,所有值都是整數;釋出級別為 'alpha''beta''candidate''final'。與 Python 版本 2.0 對應的 version_info 值為 (2, 0, 0, 'final', 0)。元件也可以透過名稱訪問,所以 sys.version_info[0] 等同於 sys.version_info.major,依此類推。

在 3.1 版本中更改: 增加了命名的元件屬性。

sys.warnoptions

這是 warnings 框架的實現細節;請勿修改此值。有關 warnings 框架的更多資訊,請參閱 warnings 模組。

sys.winver

用於在 Windows 平臺上構成登錄檔鍵的版本號。它以字串資源 1000 的形式儲存在 Python DLL 中。該值通常是正在執行的 Python 直譯器的主版本號和次版本號。它在 sys 模組中提供,用於資訊目的;修改此值不會影響 Python 使用的登錄檔鍵。

可用性:Windows。

sys.monitoring

包含用於註冊回撥和控制監控事件的函式和常量的名稱空間。有關詳細資訊,請參閱 sys.monitoring

sys._xoptions

一個字典,其中包含透過 -X 命令列選項傳遞的各種特定於實現的標誌。如果明確給出,則選項名稱將對映到它們的值,或者對映到 True。例如

$ ./python -Xa=b -Xc
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
{'a': 'b', 'c': True}

CPython 實現細節: 這是訪問透過 -X 傳遞的選項的 CPython 特定方法。其他實現可能會透過其他方式匯出它們,或者根本不匯出。

3.2 版本加入。

引文

[C99]

ISO/IEC 9899:1999。“程式語言 – C。” 此標準的公開草案可在 https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 上找到。