Python3的sys模块

版权声明:版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/swinfans/article/details/85780302

Python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。

下面就来详细介绍下该模块中常用的属性和方法。

01 动态对象

  • sys.argv 传递给程序的命令行参数列表;其中,sys.argv[0]表示脚本名称,各个参数均为字符串类型。
    写一个脚本,内容如下

    import sys
    # filename:argv_test.py
    for i in range(len(sys.argv)):
          print('argv{0}: type is {1}, value is {2}'.format(i, type(sys.argv[i]), sys.argv[i]))
    

    在命令行下运行该脚本,并提供几个参数

    python argv_test.py 1 a 2 b 3 c`
    

    输出为:

    argv0: type is <class 'str'>, value is argv_test.py
    argv1: type is <class 'str'>, value is 1
    argv2: type is <class 'str'>, value is a
    argv3: type is <class 'str'>, value is 2
    argv4: type is <class 'str'>, value is b
    argv5: type is <class 'str'>, value is 3
    argv6: type is <class 'str'>, value is c
    
  • sys.path 模块的搜索路径;sys.path[0] 表示当前脚本所在目录

    在交互模式下,sys.path[0] 返回空字符串。

    >>> import sys
    >>> sys.path
    ['', '/usr/local/python3/lib/python37.zip', '/usr/local/python3/lib/python3.7', '/usr/local/python3/lib/python3.7/lib-dynload', '/usr/local/python3/lib/python3.7/site-packages']
    >>> sys.path[0]
    ''
    
  • sys.modules 已加载的模块的字典;

    可以像一般的字典一样进行各种字典操作。

    >>> sys.modules.keys()
    dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref',   'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'virtualenvwrapper', 'readline', 'atexit', 'rlcompleter'])
    
  • sys.exc_info() 获取正在处理的异常的相关信息

    返回值为一个包含异常类、异常实例和异常回溯信息的元组

    >>> import sys
    >>> s = 'abc'
    ... try:
    ...     int(s)
    ... except ValueError:
    ...     e = sys.exc_info()
    >>> type(e)
    <class 'tuple'>
    >>> exc_type, exc_value, exc_traceback = e
    >>> exc_type
    <class 'ValueError'>
    >>> exc_value
    ValueError("invalid literal for int() with base 10: 'abc'")
    >>> exc_value.args[0]
    "invalid literal for int() with base 10: 'abc'"
    >>> exc_traceback
    <traceback object at 0x103a4d948>
    >>> dir(exc_traceback)
    ['tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next']
    >>> exc_traceback.tb_frame
    <frame at 0x103bf4a98, file '<stdin>', line 4, code <module>>
    >>> exc_traceback.tb_lasti
    6
    >>> exc_traceback.tb_lineno
    2
    >>> exc_traceback.tb_next
    >>> 
    
  • sys.last_type 返回最近一次捕获的异常的类型(只在交互式环境下可用

  • sys.last_value 返回最近一次捕获的异常的值(只在交互式环境下可用

  • sys.last_traceback 返回最近一次捕获的异常的追踪信息(只在交互式环境下可用

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'argv' is not defined
    >>> sys.last_type
    <class 'NameError'>
    >>> sys.last_value
    NameError("name 'argv' is not defined")
    >>> sys.last_traceback
    <traceback object at 0x103d38248>
    

02 静态对象

  • sys.builtin_module_names 当前解释器所有内置模块的名称

  • sys.copyright 包含解释器版权相关信息的字符串

  • sys.exec_prefix 用于查找特定于当前机器的python库的路径前缀

  • sys.executable Python解释器可执行文件的绝对路径

  • sys.float_info 包含有关浮点数实现的信息的结构序列

  • sys.float_repr_style 表示浮点数的repr()方法的输出样式的字符串

  • sys.hash_info 包含哈希算法相关信息的结构序列

  • sys.hexversionsys.version_info中包含的版本信息进行编码后使用十六进制表示的整数

  • sys.implementation 包含有关Python实现的相关信息

  • sys.int_info 包含有关整形实现的信息的结构序列

  • sys.maxsize 返回字符串、列表、字典和其他内置类型的最大长度

  • sys.maxunicode 返回能够表示的最大Unicode码点的整数值

  • sys.platform 返回平台标识符字符串

  • sys.prefix 返回安装平台无关Python文件的目录

  • sys.thread_info 包含有关线程实现的信息的结构序列

  • sys.version 表示当前解释器版本的字符串

  • sys.version_info 当前解释器版本的命名元组

  • sys.byteorder 本机的字节排序方式,little表示小尾,big表示大尾

  • sys.api_version 返回表示Python解释器的C语言版本API的整数

03 方法

  • sys.displayhook(p_object) 解释器以交互模式运行时,调用该函数会打印表达式的结果

  • sys.excepthook(type, value, traceback) 发生未捕获的异常时将调用该函数

    其中,type是异常类,value是异常的实例,traceback是回溯对象。默认行为是打印该异常并回溯到标准错误。不过,可以重新定义该函数来实现另一种处理未捕获异常的方法(在诸如调试器或者CGI脚本这样的专门的应用程序中可能会用到)。

  • sys.exit(n) 通过引发SystemExit异常来退出当前程序

    n是一个表示状态码的整数退出码。0值表示正常(默认值),非零值表示异常。

    如果n指定为一个非整数值,则将它打印到sys.stderr并使用退出码1退出

    >>> sys.exit(0)  # 执行后将退出交互模式
    $ echo $? # 查看退出状态码
    0
    $ python  # 重新进入python的交互模式
    Python 3.7.0 (default, Jun 29 2018, 20:13:13) 
    [Clang 9.1.0 (clang-902.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.exit(3)
    $ echo $?  # 查看退出状态码
    3
    $ python  # 重新进入python的交互模式
    Python 3.7.0 (default, Jun 29 2018, 20:13:13) 
    [Clang 9.1.0 (clang-902.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.exit(0.5)
    0.5
    $ echo $?  # 查看退出状态码
    1
    
  • sys.getdefaultencoding() 返回Unicode实现所使用的默认字符串编码格式

  • sys.getfilesystemencoding 返回用于将Unicode文件名转换成操作系统使用的文件名时所用的编码格式

  • sys.getfilesystemencodeerrors() 返回将Unicode文件名转换成操作系统使用的文件名时的错误模式

  • sys.getdlopenflags() 返回调用C函数 dlopen 时使用的标志参数的值。

  • sys.getprofile() 返回由sys.setprofile(function)设置的系统配置函数

  • sys.getcheckinterval() 返回由sys.setcheckinterval()函数设置的检查异步事件的频率

  • sys.getrefcount(obj) 返回对象obj的引用计数

    >>> class Foo: pass
    ... 
    >>> foo = Foo()
    >>> sys.getrefcount(foo)
    2
    >>> bar = foo
    >>> sys.getrefcount(foo)
    3
    >>> del bar
    >>> sys.getrefcount(foo)
    2
    
  • sys.getrecursionlimit() 返回解释器的最大递归深度

    >>> sys.getrecursionlimit()  # 查看当前解释器的最大递归深度
    1000
    
  • sys.getsizeof() 获取对象占用的内存大小(用字节表示)

    >>> for obj in [int(), float(), list(), tuple(), set(), dict(), object]:
    ...     print(str(obj.__class__).ljust(20), sys.getsizeof(obj))
    ... 
    <class 'int'>        24
    <class 'float'>      24
    <class 'list'>       64
    <class 'tuple'>      48
    <class 'set'>        224
    <class 'dict'>       240
    <class 'type'>       400
    
  • sys.gettrace() 返回由sys.settrace(function)设置的跟踪函数

  • sys.setcheckinteral(n) 设置python解释器每n条指令执行一次异步事件的检查。这个设置会影响线程切换的频率

  • sys.setdlopenflags(n) 设置调用C函数 dlopen 时使用的标志参数的值

  • sys.setprofile(function) 设置系统配置函数,用于实现源代码配置程序

  • sys.setrecursionlimit(n) 设置解释器的最大递归深度

    >>> sys.getrecursionlimit()  # 查看当前解释器的最大递归深度
    1000
    >>> sys.setrecursionlimit(1100)  # 将解释器的最大递归深度设置为1100
    >>> sys.getrecursionlimit()  # 再次查看当前解释器的最大递归深度
    1100
    
  • sys.settrace(tfunc) 设置系统跟踪函数,用于实现调试器

猜你喜欢

转载自blog.csdn.net/swinfans/article/details/85780302