sys模块能帮助程序员访问与python解释器联系紧密的变量和函数。
sys.argv:命令行参数List,第一个元素是程序本身路径
常用来处理脚本执行输入参数。
#: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, 返回控制台信息:
['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:退出当前程序,可选参数为给定的返回值或错误信息
#: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) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]'
sys.path:查找模块所在目录的目录名列表(模块搜索路径,初始化时使用pythonPATH环境变量的值)
它是一个字符串列表,其中的每一个字符串都是一个目录名,在import语句执行时,解释器就会从这些目录中查找模块。
>>> 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 '
递归相关的函数:
sys.getrecursionlimit() # 获取最大递归层数 默认是1000(0-999) sys.setrecursionlimit(1200) # 设置最大递归层数
编码相关函数:
>>> sys.getdefaultencoding() # 获取解释器默认编码 'utf-8' >>> sys.getfilesystemencoding() # 获取内存数据存到文件里的默认编码 'utf-8'