zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    Input 银行卡验证
    记一次坑爹的加解密问题
    C# Html Agility Pack
    记一次坑爹的 “跨域” 问题
    FindControl的使用方法
    C#如何使用异步编程
    ReportViewer中设置ServerReport.ReportServerCredentials属性的方法
    C#中常用接口介绍
    谈谈C#中的接口
    DataTable与Linq相互转换
  • 原文地址:https://www.cnblogs.com/xiugeng/p/8716223.html
Copyright © 2011-2022 走看看