python中sys模块有什么用_Python sys模块用法详解
sys 模塊代表了 Python 解釋器,主要用于獲取和 Python 解釋器相關的信息。
在 Python 的交互式解釋器中先導入 sys 模塊,然后輸入 [e for e in dir(sys) if not e.startswith('_')] 命令(sys 模塊沒有 __all__ 變量),可以看到如下輸出結果:
>>> [e for e in dir(sys) if not e.startswith('_')] ['api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']
上面列出的程序單元就是 sys 模塊所包含的全部程序單元(包括變量、函數等),讀者不要被它們嚇著了,以為這些全都需要記下來。實際上完全沒有必要,通常都是用到哪些模塊就去查閱其對應的說明文檔和參考手冊。
sys 模塊的參考頁面為 https://docs.python.org/3/library/sys.html。
需要說明的是,大部分時候用不到 sys 模塊里很冷僻的功能,因此本節只介紹 sys 模塊中常用的屬性和函數:
sys.argv:獲取運行 Python 程序的命令行參數。其中 sys.argv[0] 通常就是指該 Python 程序,sys.argv[1] 代表為 Python 程序提供的第一個參數,sys.argv[2] 代表為 Python 程序提供的第二個參數……依此類推。
sys.byteorder:顯示本地字節序的指示符。如果本地字節序是大端模式,則該屬性返回 big;否則返回 little。
sys.copyright:該屬性返回與 Python 解釋器有關的版權信息。
sys.executable:該屬性返回 Python 解釋器在磁盤上的存儲路徑。
sys.exit():通過引發 SystemExit 異常來退出程序。將其放在 try 塊中不能阻止 finally 塊的執行。
sys.flags:該只讀屬性返回運行 Python 命令時指定的旗標。
sys.getfilesystemencoding():返回在當前系統中保存文件所用的字符集。
sys.getrefcount(object):返回指定對象的引用計數。前面介紹過,當 object 對象的引用計數為 0 時,系統會回收該對象。
sys.getrecursionlimit():返回 Python 解釋器當前支持的遞歸深度。該屬性可通過 setrecursionlimit() 方法重新設置。
sys.getswitchinterval():返回在當前 Python 解釋器中線程切換的時間間隔。該屬性可通過 setswitchinterval() 函數改變。
sys.implementation:返回當前 Python 解釋器的實現。
sys.maxsize:返回 Python 整數支持的最大值。在 32 位平臺上,該屬性值為 2**31-1;在 64 位平臺上,該屬性值為 2**63-1。
sys.modules:返回模塊名和載入模塊對應關系的字典。
sys.path:該屬性指定 Python 查找模塊的路徑列表。程序可通過修改該屬性來動態增加 Python 加載模塊的路徑。
sys.platform:返回 Python 解釋器所在平臺的標識符。
sys.stdin:返回系統的標準輸入流——一個類文件對象。
sys.stdout:返回系統的標準輸出流——一個類文件對象。
sys.stderr:返回系統的錯誤輸出流——一個類文件對象。
sys.version:返回當前 Python 解釋器的版本信息。
sys.winver:返回當前 Python 解釋器的主版本號。
下面程序示范了使用 sys 模塊的部分功能:
import sys # 顯示本地字節序的指示符。 print(sys.byteorder) # 顯示Python解釋器有關的版權信息 print(sys.copyright) # 顯示Python解釋器在磁盤上的存儲路徑。 print(sys.executable) # 顯示當前系統上保存文件所用的字符集。 print(sys.getfilesystemencoding()) # 顯示Python整數支持的最大值 print(sys.maxsize) # 顯示Python解釋器所在平臺 print(sys.platform) # 顯示當前Python解釋器的版本信息。 print(sys.version) # 返回當前Python解釋器的主版本號。 print(sys.winver)
上面程序分別調用了 sys 模塊的部分屬性和函數。運行該程序,可以看到如下輸出結果:
little
Copyright (c) 2001-2017 Python Software Foundation.
All Rights Reserved.
Copyright (c) 2000 BeOpen.com.
All Rights Reserved.
Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
D:python3.6pythonw.exe
utf-8
9223372036854775807
win32
3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] 3.6
從上面的輸出結果可以看出,Windows 7 系統(作者使用的)的字節序是小端模式,將 Python 解釋器保存在 D:python3.6pythonw.exe 處,當前 Python 版本是 3.6.2。
獲取運行參數
通過 sys 模塊的 argv 屬性可獲取運行 Python 程序的命令行參數。argv 屬性值是一個列表,其列表元素和運行參數的關系如圖 1 所示。
圖 1 運行 Python 程序時命令行參數與 argv 列表的關系
因此,如果需要獲取運行 Python 程序時傳入的參數,可以通過 argv[1]、argv[2]……來獲取。例如下面程序(編寫在 argv_test.py 文件中):
from sys import argv # 輸出argv列表的長度 print(len(argv)) # 遍歷argv列表的每個元素 for arg in argv: print(arg)
上面程序是最簡單的“Hello World”級的程序,只是這個程序增加了輸出 argv 列表的長度、遍歷 argv 列表元素的代碼。使用“python argv_test.py” 命令運行上面程序,可以看到如下輸出結果:
1
argv_test.py
此時看到 argv 列表的長度為 1,argv 的第一個元素就是被運行的 Python 程序。
如果改為使用如下命令來運行該程序:
python argv_test.py Python Swift
可以看到如下輸出結果:
3
argv_test.py
Python
Swift
上面兩次運行的結果和前面介紹的內容完全一致。
如果某個參數本身包含了空格,則應該將該參數用雙引號("")括起來;否則,Python 會把這個空格當成參數分隔符,而不是參數本身。例如,采用如下命令來運行上面程序:
python argv test.py "Python Swift"
可以看到 argv 列表的長度是 2,第一個列表元素是被運行的 Python 程序,第二個列表元素的值是“Python Swift”。
動態修改模塊加載路徑
前面介紹了使用 PYTHONPATH 環境變量來添加 Python 模塊的加載路徑,但這種方式必須預先設置好。如果需要在程序運行時動態改變 Python 模塊的加載路徑,則可通過 sys.path 屬性來實現。
sys.path 也是很有用的一個屬性,它可用于在程序運行時為 Python 動態修改模塊加載路徑。例如,如下程序在運行時動態指定加載 g:fk_ext 目錄下的模塊:
import sys # 動態添加g:fk_ext路徑作為模塊加載路徑 sys.path.append('g:\fk_ext') # 加載g:fk_ext路徑下的hello模塊 import hello
為了成功運行該程序,需要在 G: 盤中創建 fk_ext 目錄,并在該目錄下添加 hello.py 模塊文件。
總結
以上是生活随笔為你收集整理的python中sys模块有什么用_Python sys模块用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python定义一个员工类_pytho
- 下一篇: kafka 可视化工具_两小时带你轻松实