zoukankan      html  css  js  c++  java
  • Python常用模块之sys

    Python常用模块之sys

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

    常见用法

    • sys.argv
      可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。
    变量 解释
    sys.argv[0] 当前程序名
    sys.argv[1] 第一个参数
    sys.argv[0] 第二个参数

    参考代码:

    # encoding: utf-8
    # filename: argv_test.py
    import sys
    
    # 获取脚本名字
    print 'The name of this program is: %s' %(sys.argv[0])
    # 获取参数列表
    print 'The command line arguments are:'
    for i in sys.argv:
        print i
    # 统计参数个数
    print 'There are %s arguments.'%(len(sys.argv)-1)
    

    运行结果:

    E:p>python argv_test.py arg1 arg2 arg3
    The name of this program is: argv_test.py
    The command line arguments are:
    argv_test.py
    arg1
    arg2
    arg3
    There are 3 arguments.
    
    
    • sys.platform

    获取当前执行环境的平台,如win32表示是Windows 32bit操作系统,linux2表示是linux平台;

    # linux 
    >>> import sys
    >>> sys.platform
    'linux2'
    
    # windows
    >>> import sys
    >>> sys.platform
    'win32'
    
    • 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的内容,比如:

    # 在path的开始位置 插入test
    >>> sys.path.insert(0,'test')
    >>> sys.path
    ['test', '', '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']
    # 可以成功import test
    >>> import test
    # 找不到 other 这个模块
    >>> import other
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        import other
    ImportError: No module named other
    # 需要添加path
    >>> sys.path.insert(0,'other')
    >>> import other
    

    也可以用sys.path.append(“mine module path”)来添加自定义的module。

    • sys.builtin_module_names

    sys.builtin_module_names返回一个列表,包含内建模块的名字。如:

    >>> import sys
    >>> print sys.builtin_module_names
    ('__builtin__', '__main__', '_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_csv', '_functools', '_heapq', '_hotshot', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_random', '_sha', '_sha256', '_sha512', '_sre', '_struct', '_subprocess', '_symtable', '_warnings', '_weakref', '_winreg', 'array', 'audioop', 'binascii', 'cPickle', 'cStringIO', 'cmath', 'datetime', 'errno', 'exceptions', 'future_builtins', 'gc', 'imageop', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'signal', 'strop', 'sys', 'thread', 'time', 'xxsubtype', 'zipimport', 'zlib')
    

    代码示例:

    # encoding: utf-8
    # find_module.py
    
    import sys
    
    # print sys.builtin_module_names
    
    def find_module(module):
        if module in sys.builtin_module_names:
            print module," => ","__builtin__"
        else:
            print module,"=> ",__import__(module).__file__
    
    
    find_module('os')
    find_module('sys')
    find_module('strop')
    find_module('zlib')
    find_module('string')
    
    # 运行结果:
    >>> 
    ======================== RESTART: E:/p/find_module.py ========================
    os =>  E:Python27libos.pyc
    sys  =>  __builtin__
    strop  =>  __builtin__
    zlib  =>  __builtin__
    string =>  E:Python27libstring.pyc
    
    
    • sys.exit(n)

    调用sys.exit(n)可以中途退出程序,当参数非0时,会引发一个SystemExit异常,从而可以在主程序中捕获该异常。
    看代码:

    # encoding: utf-8
    import sys
    
    print 'running...'
    
    try:
        sys.exit(1)
    except SystemExit:
        print 'SystemExit exit 1'
    
    print 'exited'
    

    运行结果:

    >>> 
    ======================= RESTART: E:/p/sys_exit_test.py =======================
    running...
    SystemExit exit 1
    exited
    

    也可以自定义exitfunc方法,用于程序退出前调用,进行一些清理动作。
    详细可以参考Python sys.exitfunc Examples

  • 相关阅读:
    Surface Mount Package Details
    Boost Converter
    IPC low/medium/high density 什么意思?
    SMT Surface Mount Technology footprint references
    Time Step Too Small in Multisim
    mOByDiC E90C2600 EOBD/OBDII to RS232 gateway
    STN1110 Multiprotocol OBD to UART Interpreter
    STN1170 Multiprotocol OBD to UART Interpreter
    BR16F84 OBD II Interface Chip For PWM, VPW, and ISO 9141-2 Vehicles
    ELM327 OBD to RS232 Interpreters
  • 原文地址:https://www.cnblogs.com/vman/p/5555559.html
Copyright © 2011-2022 走看看