• 常见模块之sys模块


    sys模块提供了一系列有关Python运行环境的变量和函数

    sys.path:path是一个目录列表,供Python从中查找第三方扩展模块。在python启动时,sys.path根据内建规则、PYTHONPATH变量进行初始化。

    >>>sys.path
    ['', 'E:\Python27\Lib\idlelib', 'C:\Windows\system32\python27.zip', 'E:\Python27\DLLs', 'E:\Python27\lib', 'E:\Python27\lib\plat-win', 'E:\Python27\lib\lib-tk', 'E:\Python27', 'E:\Python27\lib\site-packages']

    有时候为了让python能够找到我们自己定义的模块,需要修改sys.path的内容,比如:

    sys.path.append(“ path”)

    处理模块

    path 列表是一个由目录名构成的列表, Python 从中查找扩展模块( Python 源模块, 编译模块,或者二进制扩展).

    启动 Python 时,这个列表从根据内建规则, PYTHONPATH 环境变量的内容, 以及注册表( Windows 系统)等进行初始化.

    使用sys模块查找内建模块

    builtin_module_names 列表包含 Python 解释器中所有内建模块的名称:

    print(sys.builtin_module_names )
    ('_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha512', '_signal', '_sre', '_stat', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'sys', 'time', 'winreg', 'xxsubtype', 'zipimport', 'zlib')

    使用sys模块查找已导入的模块

    modules 字典包含所有加载的模块. import 语句在从磁盘导入内容之前会先检查这个字典.

    首先modules字典:

    print(sys.modules)
    {'os': <module 'os' from 'C:\Program Files\Anaconda3\lib\os.py'>, '_locale': <module '_locale' (built-in)>, 'encodings.gbk': <module 'encodings.gbk' from 'C:\Program Files\Anaconda3\lib\encodings\gbk.py'>, '_codecs_cn': <module '_codecs_cn' (built-in)>, '_bootlocale': <module '_bootlocale' from 'C:\Program Files\Anaconda3\lib\_bootlocale.py'>, '_io': <module 'io' (built-in)>, 'io': <module 'io' from 'C:\Program Files\Anaconda3\lib\io.py'>, 'genericpath': <module 'genericpath' from 'C:\Program Files\Anaconda3\lib\genericpath.py'>, '_stat': <module '_stat' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, 'encodings.mbcs': <module 'encodings.mbcs' from 'C:\Program Files\Anaconda3\lib\encodings\mbcs.py'>, '__main__': <module '__main__' from 'F:/untitled2/练习2/测试/text.py'>, 'encodings': <module 'encodings' from 'C:\Program Files\Anaconda3\lib\encodings\__init__.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'C:\Program Files\Anaconda3\lib\_sitebuiltins.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'C:\Program Files\Anaconda3\lib\encodings\utf_8.py'>, 'encodings.aliases': <module 'encodings.aliases' from 'C:\Program Files\Anaconda3\lib\encodings\aliases.py'>, '_codecs': <module '_codecs' (built-in)>, '_signal': <module '_signal' (built-in)>, '_weakrefset': <module '_weakrefset' from 'C:\Program Files\Anaconda3\lib\_weakrefset.py'>, 'sysconfig': <module 'sysconfig' from 'C:\Program Files\Anaconda3\lib\sysconfig.py'>, 'abc': <module 'abc' from 'C:\Program Files\Anaconda3\lib\abc.py'>, 'os.path': <module 'ntpath' from 'C:\Program Files\Anaconda3\lib\ntpath.py'>, '_weakref': <module '_weakref' (built-in)>, '_warnings': <module '_warnings' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'encodings.latin_1': <module 'encodings.latin_1' from 'C:\Program Files\Anaconda3\lib\encodings\latin_1.py'>, 'nt': <module 'nt' (built-in)>, 'ntpath': <module 'ntpath' from 'C:\Program Files\Anaconda3\lib\ntpath.py'>, 'sys': <module 'sys' (built-in)>, '_thread': <module '_thread' (built-in)>, 'site': <module 'site' from 'C:\Program Files\Anaconda3\lib\site.py'>, 'encodings.cp437': <module 'encodings.cp437' from 'C:\Program Files\Anaconda3\lib\encodings\cp437.py'>, 'zipimport': <module 'zipimport' (built-in)>, '_multibytecodec': <module '_multibytecodec' (built-in)>, 'codecs': <module 'codecs' from 'C:\Program Files\Anaconda3\lib\codecs.py'>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, 'builtins': <module 'builtins' (built-in)>, 'stat': <module 'stat' from 'C:\Program Files\Anaconda3\lib\stat.py'>, 'errno': <module 'errno' (built-in)>, '_collections_abc': <module '_collections_abc' from 'C:\Program Files\Anaconda3\lib\_collections_abc.py'>, '_imp': <module '_imp' (built-in)>}

    查找是用字典查找的末模式:

    print (sys.modules.keys())
    ['os.path', 'os', 'exceptions', '_ _main_ _', 'ntpath', 'strop', 'nt',
    'sys', '_ _builtin_ _', 'site', 'signal', 'UserDict', 'string', 'stat']

    使用sys重定向输出:

    print 'Dive in'        # 标准输出
    saveout = sys.stdout        # 终在重定向前保存stdout,这样的话之后你还可以将其设回正常
    fsock = open('out.log', 'w')      # 打开一个新文件用于写入。如果文件不存在,将会被创建。如果文件存在,将被覆盖。
    sys.stdout = fsock                 # 所有后续的输出都会被重定向到刚才打开的新文件上。
    print  'This message will be logged instead of displayed'    # 这样只会将输出结果“打印”到日志文件中;屏幕上不会看到输出
    
    sys.stdout = saveout   # 在我们将 stdout 搞乱之前,让我们把它设回原来的方式。    
    
    fsock.close()     # 关闭日志文件。

    使用sys模块退出程序:

    import sys
    sys.exit(1)

    注意 sys.exit 并不是立即退出. 而是引发一个 SystemExit 异常. 这意味着你可以在主程序中捕获对 sys.exit 的调用

    $捕获sys.exit调用

    import sys
    print "hello"
    try:
        sys.exit(1)
    except SystemExit:   # 捕获退出的异常
        pass                    # 捕获后不做任何操作
    print "there"
    
    hello
    there

    重要作用:如果准备在退出前自己清理一些东西(比如删除临时文件), 你可以配置一个 "退出处理函数"(exit handler), 它将在程序退出的时候自动被调用

  • 相关阅读:
    java堆和栈的区别
    什么是java 序列化,如何实现java 序列化?
    HashMap和Hashtable的区别
    [LeetCode] 548. Split Array with Equal Sum 分割数组成和相同的子数组
    [LeetCode] 533. Lonely Pixel II 孤独的像素 II
    [LeetCode] 531. Lonely Pixel I 孤独的像素 I
    [LeetCode] 205. Isomorphic Strings 同构字符串
    [LeetCode] 351. Android Unlock Patterns 安卓解锁模式
    Python list、tuple、dict区别
    Minimum number of swaps required to sort an array
  • 原文地址:https://www.cnblogs.com/z18271397173/p/8509242.html
Copyright © 2020-2023  润新知