python模塊之sys

sys模塊提供對由解釋器使用或維護的某些變量、與解釋器交互的函數的訪問接口。python

sys.abiflags

在使用標準configure腳本構建python的POSIX系統上,該屬性包含了PEP 3149中規定的ABI標誌。linux

sys.argv

傳遞給python腳本的命令行參數列表。argv[0]表示腳本名稱(是否是完成路徑名取決於操做系統)。若是命令使用-c選項執行,argv[0]表示字符串-c。若是命令行沒有指定腳本名稱,argv[0]爲空字符串。android

sys.base_exec_prefix

sys.base_prefix

sys.byteorder

本機字節順序的指示符。大尾平臺上值是"big",小尾平臺上值是"little"git

sys.builtin_module_names

編譯到python編譯器的全部模塊的名稱的字符串列表windows

sys.call_tracing(func, args)

sys.copyright

返回與python解釋器有關的版權信息api

sys._clear_type_cache()

清除內部類型緩存。類型緩存用於加速屬性、方法查找。僅在引用泄露調試期間刪除沒必要要的引用時使用。緩存

此函數應僅用於內部和專用用途併發

sys._current_frames()

返回函數調用時,每一個線程標識符與該線程中處於活動狀態的頂層堆棧幀的字典映射。traceback模塊中的函數能夠經過給定這樣的幀構建調用堆棧。app

這對於調試死鎖是很是有用的:此函數不須要死鎖線程的合做,並且只要它們保持死鎖狀態,調用堆棧都將被凍結。到調用代碼檢查幀時,非死鎖線程返回的幀可能與該線程的當前活動沒有關係。框架

此函數應僅用於內部和專用用途

sys.breakpointhook()

sys._debugmallocstats()

打印CPython內存分配器狀態的低級信息到stderr。

若是python構建使用了-with-pydebug配置,此方法還會執行一些昂貴的內部一致性檢查

此方法特定於CPython解釋器使用

sys.dllhandle

指定python DLL句柄的整數,僅在windows平臺可用

sys.displayhook(value)

sys.dont_write_bytecode

若是值爲True,導入源模塊時python將不會寫入.pyc文件。該值初始化設置爲True或False,取決於命令行選項-B以及PYTHONDONTWRITEBYTECODE環境變量,用戶能夠經過設置值來控制字節碼文件的生成

sys.excepthook(type, value, traceback)

sys.__breakpointhook__; sys.__displayhook__; sys.__excepthook__

sys.exc_info()

返回三個值的元組,它們提供有關當前正在處理的異常的信息。返回的信息特定於當前線程以及當前堆棧幀。若是當前堆棧幀無異常處理,則信息來自正在調用的堆棧幀或堆棧幀的調用者,等等,直到發現正在處理異常的堆棧幀。這裏的「處理異常」指的是執行except子句。對於任何堆棧幀而言,只能訪問當前正處理的異常的信息

若是堆棧中的任何地方都無異常處理,返回包含3個None值的元組。不然返回包含(type, value, traceback)的元組。type指當前正處理的異常的類型,value指異常實例,traceback獲取一個追蹤對象,它封裝了異常最初發生的地方的調用堆棧

sys.exec_prefix

sys.executable

返回python解釋器的可執行二進制文件的絕對路徑。若是python沒法獲取其真實路徑,返回空字符串或None

sys.exit([arg])

退出python。此方法其實是經過拋出SystemExit異常實現的,所以try語句中finally子句的清理操做仍會獲得執行,且能在外層攔截退出意圖

import sys

try:
    sys.exit(1)
except SystemExit:
    print("catch exception...")
finally:
    print("cleanup action...")

可選參數arg說明退出狀態(默認爲0),能夠是整數,也能夠是其餘類型的對象。若是是整數,0視爲"成功終止",任何非零整數都將視爲"異常終止"。大多數系統要求其範圍在0-127之間,不然可能產生不肯定的結果。Unix程序一般用2表示命令行語法錯誤,1表示其餘全部異常。若是傳入了非整型對象,None等同0,其餘對象都等同1,且會被打印到stderr。sys.exit("some error message")是錯誤發生時快速退出程序的一種方法。

由於exit()基本上只是拋出異常,當在主線程中調用它且沒有捕獲異常時,它僅會退出程序

sys.flags

sys.float_info

sys.float_repr_style

sys.getallocatedblocks()

返回解釋器當前分配的內存塊數量。主要用於追蹤和調試內存泄漏。受解釋器內部緩存影響,每次調用返回的值均可能不同,能夠經過調用_clear_type_cache()gc.collect()方法獲取更可預測的結果。

出於某些緣由,這個值可能沒法計算,將返回0

sys.getandroidapilevel()

返回安卓API版本的構建時間,以整數表示。僅適用於安卓平臺

sys.getcheckinterval()

返回解釋器的檢查間隔。在3.2版本中被getswitchinterval()替代

sys.getdefaultencoding()

Unicode使用的默認字符編碼名稱

sys.getdlopenflags()

sys.getfilesystemencoding()

文件名的Unicode形式和字節形式相互轉換使用的編碼名稱。爲了更好的兼容性,在全部狀況下都應該使用字符串形式的文件名,儘管也支持字節形式。接收或返回文件名的函數應該支持str或bytes類型並在內部轉換爲系統偏向的展現格式。

返回的編碼老是兼容ASCII

os.fsencode()os.fsdecode()使用此方法返回的編碼進行編解碼處理

  • 在UTF-8模式下,任何平臺都返回"utf-8"
  • 在Mac OS X平臺,返回"utf-8"
  • 在Unix平臺,返回語言環境編碼(locale encoding)
  • 在Windows平臺,取決於用戶配置,返回"utf-8"或"mbcs"

sys.getfilesystemencodeerrors()

文件名的Unicode形式和字節形式相互轉換使用的錯誤模式。

sys.getrefcount(object)

返回object的引用次數,一般高於期待值,由於包含了object做爲參數傳遞給此方法的臨時引用

sys.getrecursionlimit()

python解釋器堆棧當前設置的最大遞歸深度,能夠經過setrecursionlimit()設置。

sys.getsizeof(object[, default])

返回任意對象的字節大小。全部的內置對象都能返回正確的結果,但對於第三方擴展不必定適用。
Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.
對於未提供獲取大小的方式的對象,返回default。若是未提供default,拋出TypeError異常。

getsizeof()函數調用對象的__sizeof__方法,若是對象由垃圾回收器管理,還會計算額外的垃圾回收器開銷

sys.getswitchinterval()

返回解釋器的線程切換間隔

sys._getframe([depth])

sys.getprofile()

sys.gettrace()

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是一個長度爲3的元組,其餘元素的值都是整數。各個元素還能夠經過名稱訪問,好比sys.getwindowsversion()[0]等同於sys.getwindowsversion().major(僅前5個元素可經過下標訪問)。

platform的值爲2(VER_PLATFORM_WIN32_NT)

product_type的值爲下列中的一個:
圖片描述

platform_version返回當前操做系統的精確major版本、minor版本和版本號(build number)。

>>> import sys
>>> sys.getwindowsversion()
sys.getwindowsversion(major=10, minor=0, build=17134, platform=2, service_pack='')
>>> sys.getwindowsversion().platform_version
(10, 0, 17134)

sys.get_asyncgen_hooks()

sys.get_coroutine_origin_tracking_depth()

sys.get_coroutine_wrapper()

sys.hash_info

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能夠顯示更人性化的相同信息。

>>> sys.version_info
sys.version_info(major=3, minor=7, micro=0, releaselevel='final', serial=0)
>>> sys.hexversion
50790640
>>> hex(sys.hexversion)
'0x30700f0'

hexversion是一個具備如下佈局的32位數字:
圖片描述

所以2.1.0a3是hexversion0x020100a3

sys.implementation

當前運行的python解釋器的實現信息。下列屬性在不一樣的python實現上都存在:

  • name:實現標識符,好比"cpython"。
  • version:具備同sys.version_info相同的格式,表示python實現的版本。對於Cpython來講,sys.implementation.versionsys.version_info值相同。
  • hexversion:python實現版本的十六進制格式,相似sys.hexversion
  • cache_tag:緩存模塊的文件名中使用導入機制的標記。按照慣例,它的值是實現名稱和版本的組合,好比"cpython-33"。然而python實現也可能使用其餘合適的值。若是值爲None,表示禁用了模塊緩存

sys.implementation可能包含特定python實現的額外屬性。非標準屬性必須以"_"開頭。不管其內容如何,​​sys.implementation都不會在解釋器運行期間或實現版本之間發生變化

sys.int_info

保存python整數的內部表示的結構序列。屬性只讀:

  • bits_per_digit:number of bits held in each digit. Python integers are stored internally in base 2**int_info.bits_per_digit
  • sizeof_digit:size in bytes of the C type used to represent a digit

sys.__interactivehook__

sys.intern(string)

sys.is_finalizing()

若是python解釋器正在關閉,返回True。

sys.last_type; sys.last_value; sys.last_traceback

這三個屬性並不必定存在,它們在異常未被處理且解釋器打印異常的錯誤信息以及堆棧跟蹤後才被設置。它們的用途在於容許交互式用戶導入調試器模塊並進行post-mortem調試而無需從新執行致使異常的代碼。

它們的含義與sys.exc_info()返回值的含義相同。

>>> sys.last_traceback
>Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute 'last_traceback'
>>> raise Exception("throw")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: throw
>>> sys.last_type
<class 'Exception'>
>>> sys.last_value
Exception('throw',)
>>> sys.last_traceback
<traceback object at 0x7f4ec9653208>

sys.maxsize

Py_ssize_t類型的變量可接受的最大整數值。一般在32位平臺上是2 ** 31 - 1,在64位平臺上是2 ** 63 - 1

sys.maxunicode

Unicode碼錶可接受的最大整數位(1114111或"0x10FFFF")

sys.meta_path

sys.modules

映射已導入的模塊名和模塊的字典對象。可操做此屬性實現強制從新加載模塊等。不過替換字典對象不必定能實現預期效果,刪除基本項也可能形成python錯誤

sys.path

說明模塊搜索路徑的字符串列表。初始化自環境變量PYTHONPATH以及依賴於安裝的默認值。

sys.path在程序啓動時初始化,sys.path[0]表示啓用python解釋器的腳本所在的目錄。若是該目錄不可用(好比解釋器是經過交互式調用的,或腳本讀取自標準輸入),則sys.path[0]爲空字符串,表示python優先在當前工做目錄搜索模塊。

程序能夠自由地修改sys.path列表。只有字符串和字節序列形式的路徑才生效,其餘類型都將被忽略。

Note:腳本目錄在環境變量PYTHONPATH以前插入sys.path。

sys.path_hooks

sys.path_importer_cache

sys.platform

表示平臺標識符的字符串。可用於添加特定於平臺的組件到sys.path中,或其餘用途。

對於Unix系統(Linux除外),它的值是uname -s指令返回的OS名稱的小寫格式與uname -r指令返回的版本信息的第一部分的組合,如sunos5freebsd8。除非是針對特定的系統版本,推薦使用以下方式:

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',再也不包含主版本。推薦使用上面的startswith,由於可以兼容老版本的python代碼。

sys.prefix

sys.ps1; sys.ps2

python解釋器的首要、次要提示符。僅在交互模式下被定義,初始值分別是>>>...

sys.setcheckinterval(interval)

自3.2版本棄用。該函數再也不有效,由於重寫了線程切換和異步任務的內在邏輯。使用setswitchinterval()替代

sys.setprofile(profilefunc)

sys.setrecursionlimit(limit)

設置python解釋器堆棧的最大深度爲limit。可避免無限遞歸致使的堆棧溢出和python崩潰。

最大遞歸深度依賴於平臺。當程序須要且平臺也能提供更大深度的遞歸支持時,用戶能夠設置更大的limit值。

若是limit值設置的太小不能知足當前遞歸深度要求時,將拋出RecursionError異常

sys.setswitchinterval(interval)

設置解釋器的線程切換間隔(單位爲秒,浮點類型)。interval肯定分配給併發運行的python線程的"timesices"的理想持續時間。實際值能夠設置的更高,尤爲是使用長時間運行的內部函數或方法。

interval時間結束後的線程調度由操做系統決定,而不是解釋器。

sys.settrace(tracefunc)

sys.set_asyncgen_hooks(firstiter, finalizer)

sys.set_coroutine_origin_tracking_depth(depth)

sys.set_coroutine_wrapper(wrapper)

sys._enablelegacywindowsfsencoding()

改變默認文件系統編碼和錯誤模式爲"mbcs"和"replace",與python3.6以前的版本保持一致。僅限Windows平臺使用。

等同於啓動python前,定義PYTHONLEGACYWINDOWSFSENCODING環境變量。

sys.stdin; sys.stdout; sys.stderr

解釋器用於標準輸入、輸出和錯誤的文件對象:

  • stdin:用於全部交互式輸入(包括調用input())
  • stdout:用於輸出print()和表達式語句,以及input()的提示
  • stderr:用於輸出解釋器自己的提示和錯誤信息

這些流是常規的文本文件(text file)對象,它們的參數選擇以下:

  • 字符編碼取決於平臺。在Windows平臺,若是是在交互模式下,使用控制檯代碼頁的編碼,除此以外使用ANSI編碼。在其餘平臺,使用語言環境編碼(locale.getpreferredencoding())。不過全部平臺均可以經過在啓動python前,設置PYTHONIOENCODING環境變量重寫編碼。
  • 在交互模式下,stdout和stderr流是行緩衝的,除此以外都是像文本文件那樣塊緩衝的。能夠經過命令行參數"-u"重寫

Note:要從標準流中讀取二進制數據或寫入二進制數據到標準流,使用底層的二進制buffer對象。例如寫入字節到stdout,使用sys.stdout.buffer.write(b"abc")。然而若是你是在寫一個python庫,且不控制其代碼在哪一個上下文中執行,要注意標準流可能被不支持buffer屬性的file-like對象如io.StringIO替換。

sys.__stdin__; sys.__stdout__; sys.__stderr__

sys.thread_info

包含線程實現信息的結構序列。

  • name:線程實現名稱

    • "nt":Windows線程
    • "pthread":POSIX線程
    • "solaris":Solaris線程
  • lock:鎖實現名稱

    • "semaphore":使用信號的鎖
    • "mutex_cond":使用互斥和條件變量的鎖
    • None:鎖信息未知
  • version:線程庫的名稱和版本。若是爲None表示信息未知

sys.tracebacklimit

發生未處理的異常時,打印的回溯信息的最大層級。默認爲1000。當設置爲0或負數時,全部的回溯信息受到打印抑制,而只打印type和value

>>> raise Exception("throw")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: throw
>>> sys.tracebacklimit = 0
>>> raise Exception("throw")
Exception: throw

sys.version

包含python解釋器版本號、使用的編譯器及其構建號信息的字符串。在交互模式下啓動python時會顯示。不要直接在sys.version上提取版本信息,應該使用sys.version_infoplatform模塊提供的功能

sys.api_verison

解釋器使用的C的接口版本。在調試python和擴展模塊的版本衝突時可能有用。

sys.version_info

包含python版本信息的元組,命名元素分別爲major, minor, micro, releaselevel和serial。除releaselevel外的全部值都是整數,releaselevel的值是"alpha", "beta", "candidate"或"final"中的一個。能夠經過屬性或下標訪問。

>>> sys.version_info
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)

sys.warnoptions

warnings框架的實現細節,不要修改。

sys.winver

sys._xoptions

經過"-X"命令行選項傳遞的特定實現標誌的字典對象(特定於CPython的訪問方式)。

$ ./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}
相關文章
相關標籤/搜索