• sys模块


    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'
  • 相关阅读:
    POJ 3672 水题......
    POJ 3279 枚举?
    STL
    241. Different Ways to Add Parentheses
    282. Expression Add Operators
    169. Majority Element
    Weekly Contest 121
    927. Three Equal Parts
    910. Smallest Range II
    921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8716223.html
Copyright © 2020-2023  润新知