1. 程式人生 > 實用技巧 >sys模組的常見用法

sys模組的常見用法

  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模組提供了變數來表示標準輸入,輸出和錯誤流,列表如下

  1. sys.stdin, 標準輸入流
  2. sys.stdout,標準輸出流
  3. 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, 在實際開發中也更常用該模組來處理命令列引數。