zoukankan      html  css  js  c++  java
  • part10-1 Python常见模块(sys模块、os模块)


    Python 有强大的第三方模块,这些第三方模块在实际运用中已经能实现很多的功能,通常不需要重复开发具有相同功能的模块。另外,Python 语言也内置了大量的模块,这些模块已经非常完善,例如对于常见的日期、时间、正则表达式、JSON支持、容器类等都有完善的模块。接下来学习 Python 内置的模块,不过这些模块还在不断的更新中,更详细的模块帮助可查看 Python 库的在线参考手册,https://docs.python.org/3/library/index.html。

    一、 sys 模块


    sys 模块代表的是 Python 解释器,主要用于获取和 Python 解释器相关的信息。在 Python 交互式解释器(命令行)中导入 sys 模块,可查看该模块提供的程序单元,注意该模块没有 __all__ 变量,示例如下:
    >>> import sys
    >>> [s for s in dir(sys) if not s.startswith('_')]
    ['api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
    'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info',
    'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks',
    'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors',
    'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',
    'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing',
    'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform',
    'prefix', 'ps1', 'ps2', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile',
    'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version',
    'version_info', 'warnoptions', 'winver']
    上面输出了 sys 模块所包含的全部程序单元(包括变量、函数等),这些程序单元不需要全部记下来,在实际使用中,用到哪些模块就去查阅其对应的说明文档和参考手机即可。sys 模块的在线参考是 https://docs.python.org/3/library/sys.html。

    下面来了解下 sys 模块中常用的属性和函数。
    (1)、sys.argv:获取运行 Python 程序的命令行参数。sys.argv[0] 是当前 Python 程序(文件),sys.argv[1] 是为 Python 程序提供的第一个参数,sys.argv[2] 是第二个参数,...... 以此类推。

    (2)、sys.byteorder:显示本地字节序的指示符。如果本地字节是大端模式,则该模块返回 big;否则返回 little。

    (3)、sys.copyright:该属性返回与 Python 解释器有关的版权信息。

    (4)、sys.executable:该属性返回 Python 解释器在磁盘上存储路径。

    (5)、sys.exit():通过引发 SystemExit 异常来退出程序。将其放在 try 块中不能阻止 finally 块的执行。

    (6)、sys.flags:该只读属性返回运行 Python 命令时指定的旗标。

    (7)、sys.getfilesystemencoding():返回在当前系统中保存文件所有的字符集,如utf-8、gbk等。

    (8)、sys.getrefcount(object):返回指定对象的引用计数。当 object 对象的引用计数为0时,系统会回收该对象。

    (9)、sys.getrecursionlimit():返回 Python 解释器当前支持的递归深度(默认是1000)。该属性可通过 setrecursionlimit() 方法重新设置。

    (10)、sys.getswitchinterval():返回当前 Python 解释器中线程切换的时间间隔(默认0.005)。可通过 setswitchinterval() 函数改变。

    (11)、sys.implementation:返回当前 Python 解释器的实现。

    (12)、sys.maxsize:返回 Python 整数支持的最大值。在32位平台上是 2**32-1,64位平台上是 2**63-1

    (13)、sys.modules:返回模块名和载入模块对应关系的字典。

    (14)、sys.path:该属性指定 Python 查找模块的路径列表。在程序中可通过修改该属性来动态增加 Python 加载模块的路径。

    (15)、sys.platform:返回 Python 解释器所在平台的标识符,windows 平台上的值是“win32”。

    (16)、sys.stdin:返回系统的标准输入流,一个类文件对象。

    (17)、sys.stdout:返回系统的标准输出流,一个类文件对象。

    (18)、sys.stderr:返回系统的错误输出流,一个类文件对象。

    (19)、sys.version:返回当前 Python 解释器的版本信息。

    (20)、sys.winver:返回当前 Python 解释器的主版本号。

    sys 模块的部分功能使用示例如下:
    import sys
    # 显示本地字节序的指标符
    print(sys.byteorder)                # little
    # 显示与 Python 解释器有关的版权信息
    print(sys.copyright)
    # 返回 Python 解释器在磁盘上的存储路径
    print(sys.executable)
    # 显示在当前系统中保存文件用的字符集
    print(sys.getfilesystemencoding())  # utf-8
    # 显示 Python 支持的最大整数
    print(sys.maxsize)
    # 显示 Python 解释器所在平台
    print(sys.platform)                 # win32
    # 显示 Python 解释器的版本信息
    print(sys.version)                  # 3.6.5 ......
    # 返回当前 Python 解释器的主版本号
    print(sys.winver)                   # 3.6
    
    运行上面代码,输出如下所示:
    little
    Copyright (c) 2001-2018 Python Software Foundation.
    All Rights Reserved.
    
    Copyright (c) 2000 BeOpen.com.
    All Rights Reserved.
    
    Copyright (c) 1995-2001 Corporation for National Research Initiatives.
    All Rights Reserved.
    
    Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
    All Rights Reserved.
    C:ProgramDataAnaconda3python.exe
    utf-8
    9223372036854775807
    win32
    3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
    3.6

    1、 获取运行参数

    sys 模块的 argv 属性可以获取运行 Python 文件的命令行参数,argv 属性值是一个列表,argv[0] 是 Python 文件名称,argv[1] 是 argv 列表的第二个元素,也是运行 Python 文件的第一个参数。对应的,argv[2] 是第二个参数,......。

    下面用示例对 argv 参数作更进一步的说明,现在新建一个 argv_test.py 文件,该文件的代码如下所示:

    from sys import argv
    # 输出 argv 列表的长度
    print("argv列表长度是:", len(argv))
    # 遍历 argv 列表的每一个元素
    for arg in argv:
      print(arg)

    这段代码中输出了 argv 列表的长度,以及 argv 列表的每一个元素,在命令行运行的结果如下所示:

    命令行命令:python argv_test.py
    输出信息是:
    argv列表长度是: 1
    argv_test.py

    从输出可以看到,argv 列表的长度是 1,argv 的第一个元素就是 Python 源文件 “argv_test.py”。下面继续在命令行下运行:
    命令行命令:python argv_test.py hello world
    输出信息是:
    argv列表长度是: 3
    argv_test.py
    hello
    world
    这次运行的时候在 Python 源文件“argv_test.py” 后面增加了两个参数“hello world”,从输出可以看出此次的列表长度是 3,从这次的运行也可看出,在命令行运行时,参数之间默认以空格作为分隔符,如果参数本身包含有空格,则需要将参数用双引号("")括起来,明确表示是一个参数,例如下面运行命令所示:
    命令行命令:python argv_test.py "hello world"
    输出信息是:
    argv列表长度是: 2
    argv_test.py
    hello world
    从输出可知,此次的 argv 列表长度是 2,hello world 也被看作是一个参数。如果命令行的双引号改为单引号,不会将 hello world 看做是一个参数。

    2、 动态修改模块加载路径

    sys 模块的 path 属性可实现动态改变 Python 模块的加载路径,前提是路径要先创建好。由于 sys.path 的属性值是列表,可以直接使用列表的 append() 方法将要动态加载的路径添加即可,示例如下:

    import sys
    # 动态添加 e:mypymodule 路径作为模块的加载路径
    sys.path.append('e:\mypymodule')
    # 加载 e:mypymodule 路径下的 hello 模块
    import hello
    
    上面这段代码要能成功运行,需要在 E 盘下创建 mypymodule 目录,并在该目录下创建 hello.py 模块文件。

    二、 os 模块

    os 模块是与操作系统有关的模块,用于获取运行程序时所在的操作系统相关信息。在 Python 交互式解释器中导入 os 模块,可用os.__all__ 命令查看该模块的公开接口,包括全部的属性和函数。该模块的属性和函数有很多,只需要掌握常用的属性和函数即可。该模块的官方参考网站是 https://docs.python.org/3/library/os.html。下面是 os 模块常用的属性和函数。

    (1)、os.name:返回导入依赖模块的操作系统名称,通常可返回'posix'、'nt'、'java'等值之一。

    (2)、os.environ:返回在当前系统上所有环境变量组成的字典。

    (3)、os.fsencode(filename):该函数对类路径(path-like)的文件名进行编码。

    (4)、os.fsdecode(filename):该函数对类路径(path-like)的文件名进行解码。

    (5)、PathLike:这是一个类,代表一个类路径(path-like)对象。

    (6)、os.getenv(key, default=None):获取指定环境变量的值。

    (7)、os.getlogin():返回当前系统的登录用户名。与该函数对应的还有 os.getuid()、os.getgroups()、os.getgid()等函数,用于获取用户ID、用户组、组ID等,这些函数通常只在UNIX系统上有效。

    (8)、os.getpid():获取当前进程ID。

    (9)、os.getppid():获取当前进程的父进程ID。

    (10)、os.putenv(key,value):该函数用于设置环境变量。

    (11)、os.cpu_count():返回当前系统的CPU数量。

    (12)、os.sep:返回路径分隔符。

    (13)、os.pathsep:返回当前系统上多条路径之间的分隔符。在windows 上是英文分号(;);在UNIX及类UNIX系统上是英文冒号(:)。

    (14)、os.linesep:返回当前系统的换行符。在 Windows 上是 “ ”;在UNIX系统上是“ ”;在 Mac OS X上是“ ”。

    (15)、os.urandom(size):返回适合作为加密使用的、最多由 size 个字节组成的 bytes 对象。该函数通过操作系统特定的随机性来源返回随机字节,该随机字节通常是不可预测的,适用于大部分加密场景。

     os 模块的部分函数用法示例如下:

    import os
    # 显示导入依赖模块的操作系统名称
    print(os.name)                  # nt
    # 获取 PYTHONPATH 环境变量的值
    print(os.getenv('PYTHONPATH'))  # .;e:mypymodule
    # 返回当前系统的登录用户名
    print(os.getlogin())            # michael
    # 获取当前进程 ID
    print(os.getpid())
    # 获取当前进程的父进程 ID
    print(os.getppid())
    # 返回当前系统的CPU数量
    print(os.cpu_count())           # 4
    # 返回路径分隔符
    print(os.sep)                   # 
    # 返回当前系统的多条路径分隔符
    print(os.pathsep)               # ;
    # 返回当前系统的换行符
    print(os.linesep)               # 
    
    # 返回适合作为加密使用的、最多由5个字节组成的 bytes 对象
    print(os.urandom(5))            # b'vxc9!x11*'
    
    运行代码,输出如下:
    nt
    .;e:mypymodule
    michael
    1832
    10072
    4
    
    ;
    
    
    b'vxc9!x11*'

    从输出可知,在 Windows 系统上 Python 导入依赖模块的操作系统名称是 “nt”;当前系统的登录用户名 michael;当前进程ID是1832;当前进程的父进程ID是10072;当前系统上是有4个CPU;当前系统的路径分隔符是“”;当前系统上多条路径的分隔符是分号(;);当前系统上是换行符是“ ”(输出的时候转换成了两个空行)。

    os 模块还有与操作文件与目录的功能函数,这些在后面部分学习。os 模块下还包含有进程管理函数,可用于启动新进程、中止已有进程等。os 模块与进程管理相关的函数如下:

    (1)、os.abort():生成一个 SIGABRT 信号给当前进程。在 UNIX 系统上,默认行为是生成内核转储;在 Windows 系统上,进程立即返回退出代码3。

    (2)、os.execl(path,arg0,arg1,...):该函数还有一系统功能类似的函数,比如 os.execle()、os.execlp()等,这些函数都是使用参数列表 arg0,arg1,...来执行 path 所代表的执行文件的。

    注意:os.exec*() 函数都是 POSIX 系统的直接映射,因此如果使用该命令来执行 Python 程序,传入的 arg0 参数没有什么作用。os._exit(n) 用于强制退出 Python 解释器。将其放在 try 块中可阻止 finally 块的执行。

    (3)、os.forkpty():fork 一个子进程。

    (4)、os.kill(pid,sig):将 sig 信号发送到 pid 对应的进程,用于结束该进程。

    (5)、os.killpg(pgid,sig):将 sig 信号发送到 pgid 对应的进程组。

    (6)、os.popen(cmd,mode='r',buffering=-1):用于向 cmd 命令打开读写管道(当 mode 为 r 时为只读管道,当 mode 为 rw 时为读写管道),buffering 缓冲参数与内置的 open() 函数有相同的含义。该函数返回的文件对象用于读写字符串,而不是字节。

    (7)、os.spawnl(mode,path,...):该函数还有一系列功能类似的函数,比如 os.spawnle()、os.spawnlp()等,这些函数用于在新进程中执行新程序。

    (8)、os.startfile(path[,openation]):对指定文件使用该文件关联的工具执行 openration 对应的操作。如果不指定 openration 操作,则默认执行打开(open)操作。openration 参数必须是有效的命令行操作项目,比如 open(打开)、edit(编辑)、print(打印)等。

    (9)、os.system(command):运行操作系统上的指定命令。

    os 模块中与进程管理相关的函数的功能示例如下:

    import os, sys
    # 运行平台上的 cmd 命令
    # os.system('cmd')
    # 使用 Excel 打开 e:abc.xlsx 文件
    os.startfile('e:abc.xlsx')
    os.spawnl(os.P_NOWAIT, r'C:Program Files (x86)Geanyingeany.exe', ' ')
    # 使用 Python 命令执行 sys_test.py 文件
    path = sys.executable
    os.execl(path, " ", 'sys_test.py', 'i')
    

    使用代码编辑工具直接运行上面代码时,可以看到程序运行后使用 Excel 打开了 abc.xlsx 文件,也打开 Geany 工具,还使用python 命令运行了 sys_test.py 文件。如果将 os.system('cmd') 这行代码取消注释,将看到程序运行后只是启动了 cmd 命令行程序,这是因为使用 os.system() 函数来运行程序时,新程序所在的进程会替代原有的进程。

    注意:使用 os.execl() 函数运行新进程后,也会取代原有进程,因此上面代码中将这行代码放在了最后。

  • 相关阅读:
    MYSQL增量备份与恢复
    Centos7上MariaDB数据库启动问题解决
    mysql数据库的常用命令
    mysql数据库用户权限设置
    使mysql数据库支持简体中文
    如何在mysql数据库中开启使用tab键补全功能
    忘记mysql超户密码的解决方法
    Excel教程(复习)
    MySQL教程(复习)
    Linux教程(复习)
  • 原文地址:https://www.cnblogs.com/Micro0623/p/12145772.html
Copyright © 2011-2022 走看看