sys模塊能幫助程序員訪問與python解釋器聯繫緊密的變量和函數。python
sys.argv:命令行參數List,第一個元素是程序自己路徑程序員
經常使用來處理腳本執行輸入參數。web
#:Desktop hqs$ cat test.py import sys print(sys.argv) #:Desktop hqs$ python test.py run web ['test.py', 'run', 'web'] #:Desktop hqs$ python /Users/hqs/Desktop/test.py run web ['/Users/hqs/Desktop/test.py', 'run', 'web']
import os import sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 將系統目錄添加到環境變量 sys.path.append(BASE_DIR) if __name__ == '__main__': from core import management # sys.argv:命令行參數List,第一個元素是程序自己路徑 argv_parser = management.ManagementTool(sys.argv) argv_parser.execute() # 解析並執行指令
from core import main class ManagementTool(object): """對用戶輸入的指令進行解析並調用相應模塊進行處理""" def __init__(self, sys_argv): """構造函數""" self.sys_argv = sys_argv # [createuser alex] print(self.sys_argv) self.verify_argv() def verify_argv(self): """ 驗證指令是否合法 python ftp_server.py start """ """驗證指令數量""" if len(self.sys_argv) < 2: self.help_msg() # 打印幫助信息 cmd = self.sys_argv[1] # 反射的理解 if not hasattr(self, cmd): # 判斷obj內有沒有cmd屬性 """沒有sys_argv[1]對應的這個命令,打印報錯和幫助信息""" print('invalid argument') self.help_msg() def help_msg(self): """幫助信息""" msg = """ start start FTP server stop stop FTP server restart restart FTP server createuser username create FTP user """ exit(msg) # 退出並打印 def execute(self): """解析並執行指令""" cmd = self.sys_argv[1] func = getattr(self, cmd) func() def start(self): """start ftp server""" server = main.FTPServer(self) # 傳參self實現management對象傳入FTPServer類 server.run_forever() def createuser(self): print(self.sys_argv) # 直接拿數據,不須要傳參數
執行入口程序:python start.py -h 127.0.0.1 -p 3308 start, 返回控制檯信息:app
['ftp_server.py', '-h', '127.0.0.1', '-p', '3308', 'start'] invalid argument start start FTP server stop stop FTP server restart restart FTP server createuser username create FTP user
sys.exit:退出當前程序,可選參數爲給定的返回值或錯誤信息python2.7
#:Desktop hqs$ cat test.py # -*- coding:utf-8 -*- import sys print(sys.argv) sys.exit('執行失敗,退出程序!') print("check exit() function") # 後面的語句再也不執行 #:Desktop hqs$ python test.py ['test.py'] 執行失敗,退出程序
sys.version:python解釋器的版本信息函數
>>> import sys >>> sys.version '2.7.10 (default, Jul 15 2017, 17:16:57) \n[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]'
sys.path:查找模塊所在目錄的目錄名列表(模塊搜索路徑,初始化時使用pythonPATH環境變量的值)編碼
它是一個字符串列表,其中的每個字符串都是一個目錄名,在import語句執行時,解釋器就會從這些目錄中查找模塊。spa
>>> sys.path ['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC']
sys.maxsize:最大的int值(python2中是sys.maxint)操作系統
>>> sys.maxsize
9223372036854775807
sys.platform:輸出一個字符串,是解釋器正在其上運行的「平臺」名稱。通常是操做系統名稱,若是是Jpython則是JAVA虛擬機命令行
>>> sys.platform 'darwin'
sys.stdin、sys.stdout、sys.stderr模塊變量是類文件流對象。表示標準UNIX概念中的標準輸入、標準輸出和標準錯誤。
>>> sys.stdout # 將屏幕做爲一個文件(一個類文件對象file-like) <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> >>> sys.stdout.write('hey!good morning!') hey!good morning!17 >>> sys.stdin.read() # 一直讀 asdadd asdad^CTraceback (most recent call last): File "<stdin>", line 1, in <module> KeyboardInterrupt >>> sys.stdin.readline() # 讀一行 asdadad 'asdadad\n'
遞歸相關的函數:
sys.getrecursionlimit() # 獲取最大遞歸層數 默認是1000(0-999) sys.setrecursionlimit(1200) # 設置最大遞歸層數
編碼相關函數:
>>> sys.getdefaultencoding() # 獲取解釋器默認編碼 'utf-8' >>> sys.getfilesystemencoding() # 獲取內存數據存到文件裏的默認編碼 'utf-8'