sys --- 系統相關的參數和函數?
該模塊提供了一些變量和函數。這些變量可能被解釋器使用,也可能由解釋器提供。這些函數會影響解釋器。本模塊總是可用的。
-
sys.argv? 一個列表,其中包含了被傳遞給 Python 腳本的命令行參數。
argv[0]為腳本的名稱(是否是完整的路徑名取決于操作系統)。如果是通過 Python 解釋器的命令行參數-c來執行的,argv[0]會被設置成字符串'-c'。如果沒有腳本名被傳遞給 Python 解釋器,argv[0]為空字符串。為了遍歷標準輸入,或者通過命令行傳遞的文件列表,參照
fileinput模塊注解
在 Unix 上,系統傳遞的命令行參數是字節類型的。Python 使用文件系統編碼和 "surrogateescape" 錯誤處理程序對它們進行解碼。當需要原始字節時,可以通過
[os.fsencode(arg) for arg in sys.argv]來獲取。
-
sys.base_exec_prefix? 在
site.py運行之前, Python 啟動的時候被設置為跟exec_prefix同樣的值。如果不是運行在 虛擬環境 中,兩個值會保持相同;如果site.py發現處于一個虛擬環境中,prefix和exec_prefix將會指向虛擬環境。然而base_prefix和base_exec_prefix將仍然會指向基礎的 Python 環境(用來創建虛擬環境的 Python 環境)3.3 新版功能.
-
sys.base_prefix? 在
site.py運行之前, Python 啟動的時候被設置為跟prefix同樣的值。如果不是運行在 虛擬環境 中, 兩個值會保持相同;如果site.py發現處于一個虛擬環境中,prefix和exec_prefix將會指向虛擬環境。然而base_prefix和base_exec_prefix將仍然會指向基礎的 Python 環境(用來創建虛擬環境的 Python 環境)3.3 新版功能.
-
sys.byteorder? 本地字節順序的指示符。在大端序(最高有效位優先)操作系統上值為
'big',在小端序(最低有效位優先)操作系統上為'little'。
-
sys.builtin_module_names? 一個元素為字符串的元組。包含了所有的被編譯進 Python 解釋器的模塊。(這個信息無法通過其他的辦法獲取,
modules.keys()只包括被導入過的模塊。)
-
sys.call_tracing(func, args)? 在啟用跟蹤時調用
func(*args)來保存跟蹤狀態,然后恢復跟蹤狀態。這將從檢查點的調試器調用,以便遞歸地調試其他的一些代碼。
-
sys.copyright? 一個字符串,包含了 Python 解釋器有關的版權信息
-
sys._clear_type_cache()? 清除內部的類型緩存。類型緩存是為了加速查找方法和屬性的。在調試引用泄漏的時候調用這個函數 只會 清除不必要的引用。
這個函數應該只在內部為了一些特定的目的使用。
-
sys._current_frames()? 返回一個字典,將每個線程的標識符映射到調用函數時該線程中當前活動的最頂層堆棧幀。注意
traceback模塊中的函數可以在給定幀的情況下構建調用堆棧。這對于調試死鎖最有用:本函數不需要死鎖線程的配合,并且只要這些線程的調用棧保持死鎖,它們就是凍結的。在調用本代碼來檢查棧頂的幀的那一刻,非死鎖線程返回的幀可能與該線程當前活動的幀沒有任何關系。
這個函數應該只在內部為了一些特定的目的使用。
-
sys.breakpointhook()? 本鉤子函數由內建函數
breakpoint()調用。默認情況下,它將進入pdb調試器,但可以將其改為任何其他函數,以選擇使用哪個調試器。該函數的特征取決于其調用的函數。例如,默認綁定(即
pdb.set_trace())不要求提供參數,但可以將綁定換成要求提供附加參數(位置參數/關鍵字參數)的函數。內建函數breakpoint()直接將其*args和**kws傳入。breakpointhooks()返回的所有內容都會從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()? 將有關 CPython 內存分配器狀態的底層的信息打印至 stderr。
如果 Python 被配置為 --with-pydebug,本方法還將執行一些開銷較大的內部一致性檢查。
3.3 新版功能.
CPython implementation detail: 本函數僅限 CPython。此處沒有定義確切的輸出格式,且可能會更改。
-
sys.displayhook(value)? 如果 value 不是
None,則本函數會將repr(value)打印至sys.stdout,并將 value 保存在builtins._中。如果repr(value)無法用sys.stdout.errors錯誤回調方法(可能較為“嚴格”)編碼為sys.stdout.encoding,請用'backslashreplace'錯誤回調方法將其編碼為sys.stdout.encoding。在交互式 Python 會話中運行 expression 產生結果后,將在結果上調用
sys.displayhook。若要自定義這些 value 的顯示,可以將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? 如果該值為 true,則 Python 在導入源碼模塊時將不會嘗試寫入
.pyc文件。該值會被初始化為True或False,依據是?-B命令行選項和PYTHONDONTWRITEBYTECODE環境變量,可以自行設置該值,來控制是否生成字節碼文件。
-
sys.excepthook(type, value, traceback)? 本函數會將所給的回溯和異常輸出到
sys.stderr中。當拋出一個異常,且未被捕獲時,解釋器將調用
sys.excepthook并帶有三個參數:異常類、異常實例和一個回溯對象。在交互式會話中,這會在控制權返回到提示符之前發生。在 Python 程序中,這會在程序退出之前發生。如果要自定義此類頂級異常的處理過程,可以將另一個 3 個參數的函數賦給sys.excepthook。
-
sys.__breakpointhook__? -
sys.__displayhook__? -
sys.__excepthook__? These objects contain the original values of
breakpointhook,displayhook, andexcepthookat the start of the program. They are saved so thatbreakpointhook,displayhookandexcepthookcan be restored in case they happen to get replaced with broken or alternative objects.3.7 新版功能: __breakpointhook__
-
sys.exc_info()? 本函數返回的元組包含三個值,它們給出當前正在處理的異常的信息。返回的信息僅限于當前線程和當前堆棧幀。如果當前堆棧幀沒有正在處理的異常,則信息將從調用的下級堆棧幀或上級調用者等位置獲取,依此類推,直到找到正在處理異常的堆棧幀為止。此處的“處理異常”被定義為“執行 except 子句”。任何堆棧幀都只能訪問當前正在處理的異常的信息。
If no exception is being handled anywhere on the stack, a tuple containing three
Nonevalues is returned. Otherwise, the values returned are(type, value, traceback). Their meaning is: type gets the type of the exception being handled (a subclass ofBaseException); value gets the exception instance (an instance of the exception type); traceback gets a traceback object (see the Reference Manual) which encapsulates the call stack at the point where the exception originally occurred.
-
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])? 從Python中退出。實現方式是拋出一個
SystemExit異常。異常拋出后try聲明的 finally 分支語句的清除動作將被出發。此動作有可能打斷更外層的退出嘗試。可選參數 arg 可以是表示退出狀態的整數(默認為 0),也可以是其他類型的對象。如果它是整數,則 shell 等將 0 視為“成功終止”,非零值視為“異常終止”。大多數系統要求該值的范圍是 0--127,否則會產生不確定的結果。某些系統為退出代碼約定了特定的含義,但通常尚不完善;Unix 程序通常用 2 表示命令行語法錯誤,用 1 表示所有其他類型的錯誤。傳入其他類型的對象,如果傳入
None等同于傳入 0,如果傳入其他對象則將其打印至stderr,且退出代碼為 1。特別地,sys.exit("some error message")可以在發生錯誤時快速退出程序。由于
exit()最終“只是”拋出一個異常,因此當從主線程調用時,只會從進程退出;而異常不會因此被打斷。在 3.6 版更改: 在 Python 解釋器捕獲
SystemExit后,如果在清理中發生錯誤(如清除標準流中的緩沖數據時出錯),則退出狀態碼將變為 120。
-
sys.flags? 具名元組 flags 含有命令行標志的狀態。這些屬性是只讀的。
attribute -- 屬性
標志
debuginteractiveisolatedoptimizeno_user_siteno_siteignore_environmentverbosebytes_warningquiethash_randomizationdev_mode-Xdevutf8_mode-Xutf8在 3.2 版更改: 為新的
-q標志添加了quiet屬性3.2.3 新版功能:
hash_randomization屬性在 3.3 版更改: 刪除了過時的
division_warning屬性在 3.4 版更改: 為
-Iisolated標志添加了isolated屬性。
-
sys.float_info? 一個 具名元組,存有浮點型的相關信息。它包含的是關于精度和內部表示的底層信息。這些值與標準頭文件
float.h中為 C 語言定義的各種浮點常量對應,詳情請參閱 1999 ISO/IEC C 標準 [C99] 的 5.2.4.2.2 節,'Characteristics of floating types(浮點型的特性)'。attribute -- 屬性
float.h 宏
解釋
epsilonDBL_EPSILON
大于 1.0 的最小值和 1.0 之間的差,表示為浮點數
digDBL_DIG
浮點數可以真實表示的最大十進制數字;見下文
mant_digDBL_MANT_DIG
浮點數精度:
radix基數下的浮點數有效位數DBL_MAX
最大可表示的正有限浮點數
max_expDBL_MAX_EXP
使得
radix**(e-1)是可表示的浮點數(非無窮)的最大整數 emax_10_expDBL_MAX_10_EXP
使得
10**e在可表示的浮點數(非無窮)范圍內的最大整數 eDBL_MIN
可表示的最小正 規格化 浮點數
min_expDBL_MIN_EXP
使得
radix**(e-1)是規格化浮點數的最小整數 emin_10_expDBL_MIN_10_EXP
使得
10**e是規格化浮點數的最小整數 eradixFLT_RADIX
指數表示法中采用的基數
roundsFLT_ROUNDS
整數常數,表示算術運算中的舍入方式。它反映了解釋器啟動時系統的 FLT_ROUNDS 宏的值。關于可能的值及其含義的說明,請參閱 C99 標準 5.2.4.2.2 節。
關于
sys.float_info.dig屬性的進一步說明。如果s是表示十進制數的字符串,而該數最多有sys.float_info.dig位有效數字,則將s轉換為 float 再轉回去將恢復原先相同十進制值的字符串:>>> 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',那么對于(非無窮的)浮點數x,repr(x)將會生成一個短字符串,滿足float(repr(x)) == x的特性。這是 Python 3.1 及更高版本中的常見行為。否則float_repr_style的值將是'legacy',此時repr(x)的行為方式將與 Python 3.1 之前的版本相同。3.1 新版功能.
-
sys.getallocatedblocks()? 返回解釋器當前已分配的內存塊數,無論它們大小如何。本函數主要用于跟蹤和調試內存泄漏。因為解釋器有內部緩存,所以不同調用之間結果會變化。可能需要調用
_clear_type_cache()和gc.collect()使結果更容易預測。如果當前 Python 構建或實現無法合理地計算此信息,允許
getallocatedblocks()返回 0。3.4 新版功能.
-
sys.getcheckinterval()? Return the interpreter's "check interval"; see
setcheckinterval().3.2 版后已移除: Use
getswitchinterval()instead.
-
sys.getdefaultencoding()? 返回當前 Unicode 實現所使用的默認字符串編碼名稱。
-
sys.getdlopenflags()? 返回當前
dlopen()調用所使用的標志位的值。標志值對應的符號名稱可以在os模塊中找到(形如RTLD_xxx的常量,如os.RTLD_LAZY)。可用性: Unix。
-
sys.getfilesystemencoding()? 返回編碼名稱,該編碼用于在 Unicode 文件名和 bytes 文件名之間轉換。為獲得最佳兼容性,任何時候都應使用 str 表示文件名,盡管用字節來表示文件名也是支持的。函數如果需要接受或返回文件名,它應支持 str 或 bytes,并在內部將其轉換為系統首選的表示形式。
該編碼始終是 ASCII 兼容的。
應使用
os.fsencode()和os.fsdecode()來保證所采用的編碼和錯誤模式都是正確的。在UTF-8模式下,任何平臺上的編碼均為
utf-8。On Mac OS X, the encoding is
'utf-8'.在Unix上,編碼是語言環境編碼。
在Windows上取決于用戶配置,編碼可能是
'utf-8'或'mbcs'。
在 3.2 版更改:
getfilesystemencoding()的結果將不再有可能是None。在 3.6 版更改: Windows 不再保證會返回
'mbcs'。詳情請參閱 PEP 529 和_enablelegacywindowsfsencoding()。在 3.7 版更改: 在UTF-8模式下返回 'utf-8' 。
-
sys.getfilesystemencodeerrors()? 返回錯誤回調函數的名稱,該錯誤回調函數將在 Unicode 文件名和 bytes 文件名轉換時生效。編碼的名稱是由
getfilesystemencoding()返回的。應使用
os.fsencode()和os.fsdecode()來保證所采用的編碼和錯誤模式都是正確的。3.6 新版功能.
-
sys.getrefcount(object)? 返回 object 的引用計數。返回的計數通常比預期的多一,因為它包括了作為
getrefcount()參數的這一次(臨時)引用。
-
sys.getrecursionlimit()? 返回當前的遞歸限制值,即 Python 解釋器堆棧的最大深度。此限制可防止無限遞歸導致的 C 堆棧溢出和 Python 崩潰。該值可以通過
setrecursionlimit()設置。
-
sys.getsizeof(object[, default])? 返回對象的大小(以字節為單位)。該對象可以是任何類型。所有內建對象返回的結果都是正確的,但對于第三方擴展不一定正確,因為這與具體實現有關。
只計算直接分配給對象的內存消耗,不計算它所引用的對象的內存消耗。
對象不提供計算大小的方法時,如果有給出 default 則返回它,否則拋出
TypeError異常。如果對象由垃圾回收器管理,則
getsizeof()將調用對象的__sizeof__方法,并在上層添加額外的垃圾回收器。可以參考 recursive sizeof recipe 中的示例,關于遞歸調用
getsizeof()來得到各個容器及其所有內容物的大小。
-
sys.getswitchinterval()? 返回解釋器的“線程切換間隔時間”,請參閱
setswitchinterval()。3.2 新版功能.
-
sys._getframe([depth])? 返回來自調用棧的一個幀對象。如果傳入可選整數 depth,則返回從棧頂往下相應調用層數的幀對象。如果該數比調用棧更深,則拋出
ValueError。depth 的默認值是 0,返回調用棧頂部的幀。CPython implementation detail: 這個函數應該只在內部為了一些特定的目的使用。不保證它在所有 Python 實現中都存在。
-
sys.getprofile()? 返回由
setprofile()設置的性能分析函數
-
sys.gettrace()? 返回由
settrace()設置的跟蹤函數。CPython implementation detail:
gettrace()函數僅用于實現調試器,性能分析器,打包工具等。它的行為是實現平臺的一部分,而不是語言定義的一部分,因此并非在所有 Python 實現中都可用。
-
sys.getwindowsversion()? 返回一個具名元組,描述當前正在運行的 Windows 版本。元素名稱包括 major, minor, build, platform, service_pack, service_pack_minor, service_pack_major, suite_mask, product_type 和 platform_version。service_pack 包含一個字符串,platform_version 包含一個三元組,其他所有值都是整數。元素也可以通過名稱來訪問,所以
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 返回的是當前操作系統真實準確的主要版本、次要版本和內部版本號,不是為該進程模擬的版本。它旨在用于記錄日志,不用于檢測功能。
可用性: Windows。
在 3.2 版更改: 更改為具名元組,添加 service_pack_minor, service_pack_major, suite_mask 和 product_type。
在 3.6 版更改: 添加了 platform_version
-
sys.get_asyncgen_hooks()? 返回一個 asyncgen_hooks 對象,該對象類似于
namedtuple,形式為?(firstiter, finalizer),其中 firstiter 和 finalizer 為None或函數,函數以 異步生成器迭代器 作為參數,并用于在事件循環中干預異步生成器的終結。3.6 新版功能: 詳情請參閱 PEP 525。
注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。
-
sys.get_coroutine_origin_tracking_depth()? 獲取由
set_coroutine_origin_tracking_depth()設置的協程來源的追蹤深度。3.7 新版功能.
注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
-
sys.get_coroutine_wrapper()? Returns
None, or a wrapper set byset_coroutine_wrapper().3.5 新版功能: See PEP 492 for more details.
注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
3.7 版后已移除: The coroutine wrapper functionality has been deprecated, and will be removed in 3.8. See bpo-32591 for details.
-
sys.hash_info? 一個 具名元組,給出數字類型的哈希的實現參數。關于數字類型的哈希的詳情請參閱 數字類型的哈希運算。
attribute -- 屬性
解釋
width用于哈希值的位寬度
modulus用于數字散列方案的素數模數P。
inf為正無窮大返回的哈希值
nan為nan返回的哈希值
imag用于復數虛部的乘數
algorithm字符串、字節和內存視圖的哈希算法的名稱
hash_bits哈希算法的內部輸出大小。
seed_bits散列算法的種子密鑰的大小
3.2 新版功能.
在 3.4 版更改: 添加了 algorithm, hash_bits 和 seed_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 實現 的版本。 另一個(由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 內部整數表示形式的信息。這些屬性是只讀的。
屬性
解釋
bits_per_digit每個數字占有的位數。Python 內部將整數存儲在基底
2**int_info.bits_per_digitsizeof_digit用于表示數字的C類型的字節大小
3.1 新版功能.
-
sys.__interactivehook__? 當本屬性存在,則以 交互模式 啟動解釋器時,將自動(不帶參數地)調用本屬性的值。該過程是在讀取
PYTHONSTARTUP文件之后完成的,所以可以在該文件中設置這一鉤子。site模塊 設置了這一屬性。3.4 新版功能.
-
sys.intern(string)? 將 string 插入 "interned" (駐留)字符串表,返回被插入的字符串 -- 它是 string 本身或副本。駐留字符串對提高字典查找的性能很有用 -- 如果字典中的鍵已駐留,且所查找的鍵也已駐留,則鍵(取散列后)的比較可以用指針代替字符串來比較。通常,Python 程序使用到的名稱會被自動駐留,且用于保存模塊、類或實例屬性的字典的鍵也已駐留。
駐留字符串不是永久存在的,對
intern()返回值的引用必須保留下來,才能發揮駐留字符串的優勢。
-
sys.last_type? -
sys.last_value? -
sys.last_traceback? 這三個變量并非總是有定義,僅當有異常未處理,且解釋器打印了錯誤消息和堆棧回溯時,才會給它們賦值。它們的預期用途,是允許交互中的用戶導入調試器模塊,進行事后調試,而不必重新運行導致錯誤的命令。(通常使用
import pdb; pdb.pm()進入事后調試器,詳情請參閱pdb模塊。)這些變量的含義與上述
exc_info()返回值的含義相同。
-
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()方法,觀察這些對象是否能找到所需模塊。調用find_spec()方法最少需要傳入待導入模塊的絕對名稱。如果待導入模塊包含在一個包中,則父包的__path__屬性將作為第二個參數被傳入。該方法返回 模塊規格,找不到模塊則返回None。參見
importlib.abc.MetaPathFinder抽象基類,定義了
meta_path內的查找器對象的接口。importlib.machinery.ModuleSpecfind_spec()返回的實例所對應的具體類。
在 3.4 版更改: 在 Python 3.4 中通過 PEP 451 引入了 模塊規格。早期版本的 Python 會尋找一個稱為
find_module()的方法。如果某個meta_path條目沒有find_spec()方法,就會回退去調用前一種方法。
-
sys.modules? 一個字典,將模塊名稱映射到已加載的模塊。可以操作該字典來強制重新加載模塊,或是實現其他技巧。但是,替換的字典不一定會按預期工作,并且從字典中刪除必要的項目可能會導致 Python 崩潰。
-
sys.path? 一個由字符串組成的列表,用于指定模塊的搜索路徑。初始化自環境變量
PYTHONPATH,再加上一條與安裝有關的默認路徑。程序啟動時將初始化該列表,列表的第一項
path[0]目錄含有調用 Python 解釋器的腳本。如果腳本目錄不可用(比如以交互方式調用了解釋器,或腳本是從標準輸入中讀取的),則path[0]為空字符串,這將導致 Python 優先搜索當前目錄中的模塊。注意,腳本目錄將插入在PYTHONPATH的條目*之前*。程序可以隨意修改本列表用于自己的目的。只能向
sys.path中添加 string 和 bytes 類型,其他數據類型將在導入期間被忽略。
-
sys.path_hooks? 一個由可調用對象組成的列表,這些對象接受一個路徑作為參數,并嘗試為該路徑創建一個 查找器。如果成功創建查找器,則可調用對象將返回它,否則將引發
ImportError異常。本特性最早在 PEP 302 中被提及。
-
sys.path_importer_cache? 一個字典,作為 查找器 對象的緩存。key 是傳入
sys.path_hooks的路徑,value 是相應已找到的查找器。如果路徑是有效的文件系統路徑,但在sys.path_hooks中未找到查找器,則存入None。本特性最早在 PEP 302 中被提及。
在 3.3 版更改: 未找到查找器時,改為存儲
None,而不是imp.NullImporter。
-
sys.platform? 本字符串是一個平臺標識符,舉例而言,該標識符可用于將特定平臺的組件追加到
sys.path中。For Unix systems, except on Linux, this is the lowercased OS name as returned by
uname -swith the first part of the version as returned byuname -rappended, e.g.'sunos5'or'freebsd8', at the time when Python was built. Unless you want to test for a specific system version, it is therefore recommended to use the following idiom:if sys.platform.startswith('freebsd'): # FreeBSD-specific code here... elif sys.platform.startswith('linux'): # Linux-specific code here...
對于其他系統,值是:
系統
平臺值Linux
'linux'Windows
'win32'Windows/Cygwin
'cygwin'Mac OS X
'darwin'在 3.3 版更改: 在 Linux 上,
sys.platform將不再包含副版本號。它將總是'linux'而不是'linux2'或'linux3'。由于舊版本的 Python 會包含該版本號,因此推薦總是使用上述startswith習慣用法。
-
sys.prefix? 一個字符串,給出特定域的目錄前綴,該目錄中安裝了與平臺不相關的 Python 文件,默認為
'/usr/local'。該目錄前綴可以在構建時使用 configure 腳本的--prefix參數進行設置。Python 庫模塊的的主要集合安裝在目錄prefix/lib/pythonX.Y,而與平臺無關的頭文件 (除了pyconfig.h) 保存在prefix/include/pythonX.Y, 其中 X.Y 是 Python 的版本號, 例如3.2.注解
如果在一個 虛擬環境 中,那么該值將在
site.py中被修改,指向虛擬環境。Python 安裝位置仍然可以用base_prefix來獲取。
-
sys.ps1? -
sys.ps2? 字符串,指定解釋器的首要和次要提示符。僅當解釋器處于交互模式時,它們才有定義。這種情況下,它們的初值為
'>>> '和'... '。如果賦給其中某個變量的是非字符串對象,則每次解釋器準備讀取新的交互式命令時,都會重新運行該對象的str(),這可以用來實現動態的提示符。
-
sys.setcheckinterval(interval)? Set the interpreter's "check interval". This integer value determines how often the interpreter checks for periodic things such as thread switches and signal handlers. The default is
100, meaning the check is performed every 100 Python virtual instructions. Setting it to a larger value may increase performance for programs using threads. Setting it to a value<=0 checks every virtual instruction, maximizing responsiveness as well as overhead.3.2 版后已移除: This function doesn't have an effect anymore, as the internal logic for thread switching and asynchronous tasks has been rewritten. Use
setswitchinterval()instead.
-
sys.setdlopenflags(n)? 設置解釋器在調用
dlopen()時用到的標志,例如解釋器在加載擴展模塊時。首先,調用sys.setdlopenflags(0)將在導入模塊時對符號啟用惰性解析。要在擴展模塊之間共享符號,請調用sys.setdlopenflags(os.RTLD_GLOBAL)。標志值的符號名稱可以在os模塊中找到(即RTLD_xxx常數,如os.RTLD_LAZY)。可用性: Unix。
-
sys.setprofile(profilefunc)? 設置系統的性能分析函數,該函數使得在 Py??thon 中能夠實現一個 Python 源代碼性能分析器。關于 Python Profiler 的更多信息請參閱 Python 分析器 章節。性能分析函數的調用方式類似于系統的跟蹤函數(參閱
settrace()),但它是通過不同的事件調用的,例如,不是每執行一行代碼就調用它一次(僅在調用某函數和從某函數返回時才會調用性能分析函數,但即使某函數發生異常也會算作返回事件)。該函數是特定于線程的,但是性能分析器無法得知線程之間的上下文切換,因此在存在多個線程的情況下使用它是沒有意義的。另外,因為它的返回值不會被用到,所以可以簡單地返回None。性能分析函數中的錯誤將導致其自身被解除設置。性能分析函數應接收三個參數:frame、event 和 arg。frame 是當前的堆棧幀。event 是一個字符串:
'call'、'return'、'c_call'、'c_return'或'c_exception'。arg 取決于事件類型。這些事件具有以下含義:
'call'表示調用了某個函數(或進入了其他的代碼塊)。性能分析函數將被調用,arg 為
None。'return'表示某個函數(或別的代碼塊)即將返回。性能分析函數將被調用,arg 是即將返回的值,如果此次事件是由拋出的異常引起的,arg 為
None。'c_call'表示即將調用某個 C 函數。它可能是擴展函數或是內建函數。arg 是 C 函數對象。
'c_return'表示返回了某個 C 函數。arg 是 C 函數對象。
'c_exception'表示某個 C 函數拋出了異常。arg 是 C 函數對象。
-
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()。跟蹤函數應接收三個參數:frame、event 和 arg。frame 是當前的堆棧幀。event 是一個字符串:
'call'、'line'、'return'、'exception'或'opcode'。arg 取決于事件類型。每次進入 trace 函數的新本地作用域,都會調用 trace 函數( event 會被設置為
'call'),它應該返回一個引用,指向即將用在新作用域上的本地跟蹤函數;如果不需要跟蹤當前的作用域,則返回None。本地跟蹤函數應返回對自身的引用(或對另一個函數的引用,用來在其作用范圍內進行進一步的跟蹤),或者返回
None來停止跟蹤其作用范圍。如果跟蹤函數出錯,則該跟蹤函數將被取消設置,類似于調用
settrace(None)。這些事件具有以下含義:
'call'表示調用了某個函數(或進入了其他的代碼塊)。全局跟蹤函數將被調用,arg 為
None。返回值取決于本地跟蹤函數。'line'表示解釋器即將執行新一行代碼或重新執行循環條件。局部跟蹤函數將被調用,arg 為
None,其返回值將指定新的局部跟蹤函數。關于其工作原理的詳細說明,請參見Objects/lnotab_notes.txt。要在該堆棧幀禁用每行觸發事件,可以在堆棧幀上將f_trace_lines設置為False。'return'表示某個函數(或別的代碼塊)即將返回。局部跟蹤函數將被調用,arg 是即將返回的值,如果此次返回事件是由于拋出異常,arg 為
None。跟蹤函數的返回值將被忽略。'exception'表示發生了某個異常。局部跟蹤函數將被調用,arg 是一個
(exception, value, traceback)元組,返回值將指定新的局部跟蹤函數。'opcode'表示解釋器即將執行一個新的操作碼(操作碼的詳情請參閱
dis)。局部跟蹤函數將被調用,arg 為None,其返回值將指定新的局部跟蹤函數。每操作碼觸發事件默認情況下都不發出:必須在堆棧幀上將f_trace_opcodes顯式地設置為True來請求這些事件。
注意,由于異常是在鏈式調用中傳播的,所以每一級都會產生一個
'exception'事件。更細微的用法是,可以顯式地通過賦值
frame.f_trace = tracefunc來設置跟蹤函數,而不是用現有跟蹤函數的返回值去間接設置它。當前幀上的跟蹤函數必須激活,而settrace()還沒有做這件事。注意,為了使上述設置起效,必須使用settrace()來安裝全局跟蹤函數才能啟用運行時跟蹤機制,但是它不必與上述是同一個跟蹤函數(它可以是一個開銷很低的跟蹤函數,只返回None,即在各個幀上立即將其自身禁用)。關于代碼對象和幀對象的更多信息請參考 標準類型層級結構。
CPython implementation detail:
settrace()函數僅用于實現調試器,性能分析器,打包工具等。它的行為是實現平臺的一部分,而不是語言定義的一部分,因此并非在所有 Python 實現中都可用。在 3.7 版更改: 添加了
'opcode'事件類型;為幀對象添加了f_trace_lines和f_trace_opcodes屬性。
-
sys.set_asyncgen_hooks(firstiter, finalizer)? 接受兩個可選的關鍵字參數,要求它們是可調用對象,且接受一個 異步生成器迭代器 作為參數。firstiter 對象將在異步生成器第一次迭代時調用。finalizer 將在異步生成器即將被銷毀時調用。
3.6 新版功能: 更多詳情請參閱 PEP 525,finalizer 方法的參考示例可參閱 Lib/asyncio/base_events.py 中
asyncio.Loop.shutdown_asyncgens的實現。注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。
-
sys.set_coroutine_origin_tracking_depth(depth)? 用于啟用或禁用協程溯源。啟用后,協程對象上的
cr_origin屬性將包含一個元組,它由多個(文件名 filename,行號 line number,函數名 function name)元組組成,整個元組描述出了協程對象創建過程的回溯,元組首端是最近一次的調用。禁用后,cr_origin將為 None。要啟用,請向 depth 傳遞一個大于零的值,它指定了有多少幀將被捕獲信息。要禁用,請將 depth 置為零。
該設置是特定于單個線程的。
3.7 新版功能.
注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
-
sys.set_coroutine_wrapper(wrapper)? Allows intercepting creation of coroutine objects (only ones that are created by an
async deffunction; generators decorated withtypes.coroutine()orasyncio.coroutine()will not be intercepted).The wrapper argument must be either:
a callable that accepts one argument (a coroutine object);
None, to reset the wrapper.
If called twice, the new wrapper replaces the previous one. The function is thread-specific.
The wrapper callable cannot define new coroutines directly or indirectly:
def wrapper(coro): async def wrap(coro): return await coro return wrap(coro) sys.set_coroutine_wrapper(wrapper) async def foo(): pass # The following line will fail with a RuntimeError, because # ``wrapper`` creates a ``wrap(coro)`` coroutine: foo()
See also
get_coroutine_wrapper().3.5 新版功能: See PEP 492 for more details.
注解
本函數已添加至暫定軟件包(詳情請參閱 PEP 411 )。僅將其用于調試目的。
3.7 版后已移除: The coroutine wrapper functionality has been deprecated, and will be removed in 3.8. See bpo-32591 for details.
-
sys._enablelegacywindowsfsencoding()? 將默認文件系統編碼和錯誤處理方案分別更改為 'mbcs' 和 'replace',這是為了與 Python 3.6 前的版本保持一致。
這等同于在啟動 Python 前先定義好
PYTHONLEGACYWINDOWSFSENCODING環境變量。可用性: Windows。
3.6 新版功能: 有關更多詳細信息,請參閱 PEP 529。
-
sys.stdin? -
sys.stdout? -
sys.stderr? 解釋器用于標準輸入、標準輸出和標準錯誤的 文件對象:
stdin用于所有交互式輸入(包括對input()的調用);stdout用于print()和 expression 語句的輸出,以及用于input()的提示符;解釋器自身的提示符和它的錯誤消息都發往
stderr。
這些流都是常規 文本文件,與
open()函數返回的對象一致。它們的參數選擇如下:字符編碼取決于各個平臺。在非 Windows 平臺上使用的是語言環境 (locale) 編碼(可參閱
locale.getpreferredencoding())。在 Windows 上,控制臺設備使用 UTF-8 編碼。非字符設備(如磁盤文件和管道)使用系統語言環境編碼(即 ANSI 代碼頁)。非控制臺字符設備(即
isatty()返回的是True,如 NUL)在啟動時,會把控制臺輸入代碼頁和輸出代碼頁的值分別用于 stdin 和 stdout/stderr。如果進程原本沒有附加到控制臺,則默認為系統語言環境編碼。要重寫控制臺的特殊行為,可以在啟動 Python 前設置 PYTHONLEGACYWINDOWSSTDIO 環境變量。此時,控制臺代碼頁將用于其他字符設備。
在所有平臺上,都可以通過在 Python 啟動前設置
PYTHONIOENCODING環境變量來重寫字符編碼,或通過新的-Xutf8命令行選項和PYTHONUTF8環境變量來設置。但是,對 Windows 控制臺來說,上述方法僅在設置了PYTHONLEGACYWINDOWSSTDIO后才起效。When interactive,
stdoutandstderrstreams are line-buffered. Otherwise, they are block-buffered like regular text files. You can override this value with the-ucommand-line option.
注解
要從標準流寫入或讀取二進制數據,請使用底層二進制
buffer對象。例如,要將字節寫入stdout,請使用sys.stdout.buffer.write(b'abc')。但是,如果你在寫一個庫(并且不限制執行庫代碼時的上下文),那么請注意,標準流可能會被替換為文件類對象,如
io.StringIO,它們是不支持buffer屬性的。
-
sys.__stdin__? -
sys.__stdout__? -
sys.__stderr__? 程序開始時,這些對象存有
stdin、stderr和stdout的初始值。它們在程序結束前都可以使用,且在需要向實際的標準流打印內容時很有用,無論sys.std*對象是否已重定向。如果實際文件已經被覆蓋成一個損壞的對象了,那它也可用于將實際文件還原成能正常工作的文件對象。但是,本過程的最佳方法應該是,在原來的流被替換之前就顯式地保存它,并使用這一保存的對象來還原。
注解
某些情況下的
stdin、stdout和stderr以及初始值__stdin__、__stdout__和__stderr__可以是None。通常發生在未連接到控制臺的 Windows GUI app 中,以及在用 pythonw 啟動的 Python app 中。
-
sys.thread_info? 一個 具名元組,包含線程實現的信息。
屬性
解釋
name線程實現的名稱:
'nt': Windows 線程'pthread': POSIX 線程'solaris': Solaris 線程
lock鎖實現的名稱:
'semaphore': 鎖使用信號量'mutex+cond': 鎖使用互斥和條件變量None如果此信息未知
線程庫的名稱和版本。它是一個字符串,如果此信息未知,則為
None。3.3 新版功能.
-
sys.tracebacklimit? 當該變量值設置為整數,在發生未處理的異常時,它將決定打印的回溯信息的最大層級數。默認為
1000。當將其設置為0或小于 0,將關閉所有回溯信息,并且只打印異常類型和異常值。
-
sys.version? 一個包含 Python 解釋器版本號加編譯版本號以及所用編譯器等額外信息的字符串。 此字符串會在交互式解釋器啟動時顯示。 請不要從中提取版本信息,而應當使用
version_info以及platform模塊所提供的函數。
-
sys.api_version? 這個解釋器的 C API 版本。當你在調試 Python及期擴展模板的版本沖突這個功能非常有用。
-
sys.version_info? 一個包含版本號五部分的元組: major, minor, micro, releaselevel 和 serial。 除 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.winver? 用于在 Windows 平臺上組成注冊表鍵的版本號。 這在 Python DLL 中存儲為 1000 號字符串資源。 其值通常是
version的頭三個字符。 它在sys模塊中提供是為了信息展示目的;修改此值不會影響 Python 所使用的注冊表鍵。可用性: Windows。
-
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 implementation detail: 這是 CPython 專屬的訪問通過
-X傳遞的選項的方式。 其他實現可能會通過其他方式導出它們,或者完全不導出。3.2 新版功能.
引用
- C99
ISO/IEC 9899:1999. "Programming languages -- C." 該標準的公開草案可從 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf獲得。
