sys

1. sys.version

获取python的版本

>>> import sys
>>> sys.version
'3.6.6 (v3.6.6:4cf1f54eb7, Jun 26 2018, 19:50:54) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]'

2. sys.stdin, sys.stdin, sys.stderr

这三者是与解释器的标准输入,输出和错误流相对应的文件对象。关于这三个文件对象足以专门写一篇教程,这里只举一个例子来说明sys.stdout的作用

import sys

sys.stdout = open('test', 'a')
print('ok')

sys.stdout是标准输出流,上面的代码将标准输出流重定向到一个打开的文件中,这样print函数在执行时,就不会在终端输出内容,而是在将内容写入到文件中

3. sys.modules

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度

4. sys.path

获取指定模块搜索路径的列表,当你在程序中使用import关键字引入一个模块时,解释器会按照一定的顺序来查找这个模块

  1. 当前目录
  2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录

5. sys.exit(n)

程序执行到代码末尾,解释器会自动退出,如果你希望中途退出程序,可以使用sys.exit()方法,n可以传入一个整数,你可以在主程序中捕获对sys.exit()的调用并获得这个n,一般0表示正常退出,其他为异常

import sys

def test():
    sys.exit(3)

try:
    test()
except SystemExit as e:
    print(e)

程序输出结果是 3

6. sys.argv

在外部向程序内部传递参数,定义一个名为test.py的脚本,内容如下

import sys


def my_print(content, count):
    for i in range(count):
        print(content)


if __name__ == '__main__':
    print(sys.argv)
    content, count = sys.argv[1], int(sys.argv[2])
    my_print(content, count)

这段代码看起来有点怪怪的,sys.argv到底是什么东西,别急,要想理解这段代码,就必须在终端通过python命令来运行程序

python3 test.py 接收参数 2

在使用python命令执行脚本时,脚本的后面还跟了两段内容,这就是在向程序传递运行时所需要的参数,sys.argv就是用来存储这个参数的

程序输出内容为

['test.py', '接收参数', '2']
接收参数
接收参数

sys.argv是一个列表,包含了脚本的名称后紧跟在脚本后面的参数

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案