sys模組的常見用法
阿新 • • 發佈:2020-12-12
python的內建模組sys,提供了系統相關的一些變數和函式,在實際開發中,常見的有以下幾種用法
1. 獲取作業系統資訊
>>> import sys # 在window上執行 >>> sys.platform 'win32' # 在linux上執行 >>> sys.platform 'linux2'
經典的使用場景, 針對只適用於linux平臺的程式碼,通過sys來判斷當前作業系統是否符合要求。
2. 獲取python版本資訊
>>> sys.version '3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)]' >>> sys.version_info sys.version_info(major=3, minor=8, micro=2, releaselevel='final', serial=0) >>> ver = sys.version_info >>> ver.major 3 >>> ver.minor 8 >>> ver.micro 2
對於python版本有限制的程式碼,可以通過以上方法來判斷python版本是否符合要求。
3. 獲取編碼方式
>>> sys.getdefaultencoding()'utf-8'
在python3中,預設的編碼方式為utf8, 所以不再需要像python2那樣,自己手動設定編碼格式為utf-8。
4. 標準輸入,輸出和錯誤流
sys模組提供了變數來表示標準輸入,輸出和錯誤流,列表如下
- sys.stdin, 標準輸入流
- sys.stdout,標準輸出流
- sys.stderr,標準錯誤流
具有檔案控制代碼類似的操作,可以從標準輸入流讀取資訊,向標準輸出和標準錯誤流寫入資訊,用法如下
>>> sys.stderr.write('stderr info\n') stderr info 12 >>> sys.stdout.write('stdout info\n') stdout info 12
5. 中斷執行
可以通過sys.exit函式來中斷程式碼的執行,用法如下
>>> sys.exit()
該函式也可以新增一個引數,預設為0,表示正常退出,其他引數表示非正常退出,支援用字串來自定義錯誤資訊。
6. sys.path
該變數儲存了python尋找模組的路徑
>>> sys.path ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
可以在程式碼中動態修改sys.path列表中的元素,以達到成功匯入某個模組的目的。
7. sys.module
該變數是一個字典,儲存了已經匯入的模組
>>> import sys >>> sys.modules.keys() dict_keys(['abc', '_signal', 'sitecustomize', 'sys', '_collections_abc', '_weakrefset', '_sitebuiltins', '_weakref', 'sysconfig', 'encodings.utf_8', '__main__', 'apport_python_hook', '_sysconfigdata_m', 'posixpath', 'site', 'readline', 'stat', 'encodings', 'encodings.latin_1', 'zipimport', 'encodings.aliases', '_frozen_importlib_external', 'io', '_frozen_importlib', '_imp', 'atexit', 'os', '_stat', '_sysconfigdata', 'os.path', '_codecs', '_thread', 'posix', 'marshal', 'codecs', '_warnings', 'builtins', 'errno', 'genericpath', 'rlcompleter', '_io'])
8. 獲取命令列引數
sys.argv是一個列表, 該列表儲存了命令列引數,當採用指令碼方式執行時,可以方便的處理命令列引數。假設一個python指令碼名為test.py,其中的內容如下
import sys for arg in sys.argv: print(arg)
在作業系統中執行該指令碼,會列印命令列引數的內容
> python test.py arg1 arg2
test.py
arg1
arg2
可以看出,sys.argv的第一個元素是指令碼的名字,接下來為傳遞給指令碼的命令列引數。對於簡單的指令碼程式設計,用這種方式來捕獲命令列引數是非常方便的。當然,對於命令列引數的傳遞,python還有更加強大的內建模組argparse, 在實際開發中也更常用該模組來處理命令列引數。