sys模塊

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