Python系统模块sys

在python官方提供的核心库中,有两大比较重要的核心库,分别是sys和os,这两个库模块都是直接和操作系统打交道的模块,因此想要熟练掌握python系统编程,对这两个模块的了解就必不可少了。

今天我们来看一下sys这个模块,既然这个模块是和操作系统打交道的,那么我们来看一下它涉及系统信息的功能。

1. 输出系统平台和版本

在很多Python库中,进行系统版本的判别就是使用sys模块来进行的,我们来看一下具体的使用代码:

  • Windows系统

    >>> import sys
    >>> sys.platform
    ‘win32‘
  • Linux系统
    >>> import sys
    >>> sys.platform
    ‘linux‘

2. Python搜索模块的路径

在使用多版本Python进行开发的时候,如果发现某个模块搜索不到,这个时候就可以使用sys模块来查看当前Python版本的搜索路径,如下所示:

>>> import sys
>>>sys.path
[‘‘, ‘/root/.pyenv/versions/3.7.3/lib/python37.zip‘, ‘/root/.pyenv/versions/3.7.3/lib/python3.7‘,
‘/root/.pyenv/versions/3.7.3/lib/python3.7/lib-dynload‘, ‘/root/.pyenv/versions/ansible/lib/python3.7/site-packages‘,
 ‘/root/.pyenv/versions/ansible/lib/python3.7/site-packages/cryptography-2.6.1-py3.7-linux-x86_64.egg‘,
‘/root/.pyenv/versions/ansible/lib/python3.7/site-packages/paramiko-2.4.2-py3.7.egg‘,
....
‘/root/.pyenv/versions/ansible/lib/python3.7/site-packages/pycparser-2.19-py3.7.egg‘,
‘/root/.pyenv/versions/3.7.3/envs/ansible/lib/python3.7/site-packages‘]

因为中间输出比较长,这里省略一部分。sys.path这个变量会输出你当前的Python搜索路径,也就是Python到哪里去找你的模块,如果发现对于的路径信息和你的Python版本信息不一致,说明你使用的环境配置有误,这个时候就需要修改Python可执行文件的路径了。

3. 查看当前Python进程中已加载的模块列表

和上面的功能类似,如果Python脚本执行的时候,发现模块没有找到,这个时候先要看模块加载路径是否正确,如果模块加载路径是对的,这个时候就需要来排查,这个模块是否已经加载。这个时候也可以使用sys模块来排查,看下面的代码:

>>> sys.modules
{
  ‘sys‘: <module ‘sys‘ (built-in)>, ‘builtins‘: <module ‘builtins‘ (built-in)>,
  ....
 ‘rlcompleter‘: <module ‘rlcompleter‘ from ‘/root/.pyenv/versions/3.7.3/lib/python3.7/rlcompleter.py‘>
}

sys.modules默认会输出当前python进程加载的所有模块,以字典的方式返回结果,字典的键是模块名称,字典的值是模块的路径。因此如果要查找某个模块,就可以使用字典来取值:

>>> sys.modules[‘rlcompleter‘]
<module ‘rlcompleter‘ from ‘/root/.pyenv/versions/3.7.3/lib/python3.7/rlcompleter.py‘>

在上面的示例中,我们通过字典找到了rlcompleter这个模块对应得路径,如果你在项目中需要排查某个模块是否正确加载,输出sys.modules[‘your_module_name‘]的结果,自然就看的一清二楚了。

4. 查看异常的详细信息

在一般的Python课程中,讲到异常的时候,通常会使用下面的格式来输出异常内容:

>>> try:
...     raise IndexError(‘index error‘)
... except Exception as e:
...     print(e)
...
index error

但是如果我们使用sys模块,还可以看到更详细的内容,如下所示:

>>> import traceback
>>> try:
...     raise IndexError(‘index error‘)
... except:
...     print(sys.exc_info())
...     traceback.print_tb(sys.exc_info()[2])
...
(<class ‘IndexError‘>, IndexError(‘index error‘), <traceback object at 0x7fbfbbe57d88>)
  File "<stdin>", line 2, in <module>

sys.exc_info()这个函数会返回三个对象组成的元组,第一个是异常类型,第二个是异常的详细信息,第三个是异常的内存地址。根据前两个参数可以输出具体的错误信息,第三个参数可以借助traceback这个追踪模块输出错误出现在第几行。

5. sys模块的其他工具

  • sys.argv,保存python脚本的命令行参数,示例如下:

    import sys
    print(sys.argv)

    上面的内容是在test.py这个脚本文件里的内容,然后我们来执行命令python test.py a b c d,输出结果如下:
    [‘test.py‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘]
    第一个元素是脚本文件名称,后面是参数名称。根据这个选项,就可以写出带参数功能的python脚本

  • sys.exit 退出程序,在程序运行的时候,可以用这个函数结束运行中的程序。示例代码如下:
    
    import sys

i = 0
while True:
if i < 5:
print(i)
i+=1
else:
sys.exit(1)

在上面的脚本中,我们设定最终的结束代码是1,那么我们在linux中测试一下:
```shell
# echo $?
0
# python test.py
0
1
2
3
4
# echo $?
1

在上面的shell代码中,我们可以看到,没有执行脚本之前,$?的值是0,执行程序之后,$?对应得值是1。也就是说这个程序是不正常结束的。那么我们就可以在生产环境上使用的python脚本中,使用sys.exit()函数设定不同的结束代码,来判断程序的状态。

以上就是sys模块的一些常见应用,如果对大家有帮助的话,我这里感到非常荣幸。

原文地址:https://blog.51cto.com/14730652/2473605

时间: 2025-01-22 07:23:07

Python系统模块sys的相关文章

python系统模块

Python中大多数系统接口都集中在两个模块:sys和os.这么说有点过于简单化 还有一些其他的表转模块也属于这个领域他们包括: glob 用于文件名的扩展 socket 用于网络连接和进程间通信(IPC) threading,_threading,queue 用于运行和同步话并发线程 time,timeit 用于获取系统时间相关细节. subprocess,multiprocessing 用于启动和控制并行进程 signal,select,shutil,tempfile 用于多种系统相关任务

Python常用模块-SYS、OS、Time、hashlib

MarkdownPad Document 时间模块 import time 三种时间表达形式: 1.时间戳 time.time()  相对于1970年到现在的秒数 2.格式化的时间字符串 time.strftime("%Y-%m-%d %X") -可以是:可以是/ '2017-04-26 00:32:18' 3.时间元组(结构化时间) time.localtime() time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26, tm_hou

37 Python - 系统编程 sys模块应用

02 sys模块应用 001观察平台与版本信息 导入 查看平台名称/python版本 Sys.path——显示了一些目录环境,如解析器放在哪个路径下,主环境在哪里,pycharm的路径在哪里 002 观察异常信息 系统里面通过了可以捕获最近的一些异常信息 可以捕获当前程序最后抛出的异常 003 命令行参数 了解,具体内容自己参考其他资料 例子1:可以用argv打印命令行的参数 例子2:可以用argv接收命令行输入参数 004 标准流 仅仅了解 原文地址:https://www.cnblogs.c

(python) 标准模块sys和os的使用

一.sys模块 包含了系统的相关的功能.我们来学习sys.argv,它包含命令行参数. 例子:定义了一个add函数,用来实现两个整数的相加. #! coding=utf-8 # usersys.py import sys def add(a,b): print a+b print sys.argv if len(sys.argv)<2: print "argv is lower 2" else: if sys.argv[1].startswith("-") a

Python常用模块 -- sys模块的常用用法

""" sys模块是与Python解释器交互的一个接口 """ import sys print(sys.argv) # 命令行参数List,第一个元素是程序本身路径 # sys.exit(1) # 退出程序,正常退出时exit(0),错误退出sys.exit(1) print('ok') print(sys.version) # 获取Python解释程序的版本信息 print(sys.path) # 返回模块的搜索路径,初始化时使用PYTHON

python time模块 sys模块 collections模块

一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner.com/205.html 二 time模块 在Python中共有三种表达方式:1)timestamp 时间戳 2)tuple或者struct_time3)格式化字符串. 三者的转换关系示意图

python 系统模块 OS

os.system("系统命令")  调用系统命令 os.system("task kill /f /im 系统的进程") 关闭系统进程 os.listdir(地址) 扫描目录里面的文件.默认的是当前文件夹 返回一个列表 import os # os.listdir(地址) 扫描目录里面的文件.默认的是当前文件夹 print(os.listdir()) # 结果 #当前目录下的文件 ['wl_1_归并数据.py'] os.mkdir(路径) 创建一个文件夹 impo

python开发模块基础:os&amp;sys

一,os模块 os模块是与操作系统交互的一个接口 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 ''' 5 os.walk() 显示目录下所有文件和子目录以元祖的形式返回,第一个是目录,第二个是文件夹,第三个是文件 6 open(r'tmp\inner\file',w) 创建文件 7 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 可以先记录当前文件目录 8 os.chdir("dirname") 改

python一些模块的exe安装包在windows的64位系统里识别不到已安装Python目录的解决方法

在windows里安装python一些模块时候,有时候源码安装比较困难,pip install也各种报错,这时候最喜欢用别人编译好的exe或者whl文件来安装,但是在windows的64位系统里,如果有一些安装包没怎么考虑过在64位系统上的安装,在安装时候就会找不到你自己安装的python目录. 解决法子:运行国外这个脚本,即可把你64位系统上的python目录添加至注册表里. # # script to register Python 2.0 or later for use with win