zoukankan      html  css  js  c++  java
  • Python3---标准库sys

    sys

    该文章说明了sys库当中提供的方法分类,以及举例常见的一些方法的使用

    2020-02-08

    天象独行

      Python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。

      下面我们来举例看看:

    •   sys.argv

      sys.argv可以认为是一个变量或者一个列表。它的作用就是接收“命令行参数”。即接收参数给程序。举个例子,我们常用的验证网络是否正常的命令'ping'。可以在后面添加诸如“-t” 等字符。这里的“-t”字符就是命令行参数。而sys.argv的作用就是将“-t”参数告诉程序。

      举例:

      我们先采用如下代码来测验:

    import sys
    a = sys.argv[0] #[0]表示程序本身输入为程序本身,[1]表示
    print(a)

      我们运行一下该程序,我们发现输出结果为test.py,即程序本身。

    c:UsersaaronDesktopPytoon-cadevenvScripts>test.py
    test.py

      现在我们修改一下该程序,将sys.argv[0]修改为sys.argv[1]。我们还是直接运行不加任何命令行参数。我们发现程序无法运行。这里我理解为在sys.argv[1]的位置没有任何参数,需要我们从程序外输入参数,才导致错误。

    c:UsersaaronDesktopPytoon-cadevenvScripts>test.py
    Traceback (most recent call last):
    File "C:UsersaaronDesktopPytoon-cadevenvScripts est.py", line 2, in <module>
    a = sys.argv[1]
    IndexError: list index out of range

      那么,我们来尝试添加一个参数。我们发现我们输入的参数被print输出了。换句话说sys.argv[1]接收了‘ssss’参数。

    c:UsersaaronDesktopPytoon-cadevenvScripts>test.py ssss
    ssss

      下面我们输入两个参数,发现程序只接收了一个参数。那么如果我们需要多参数传入该怎么办呢?我们接下来看。

    c:UsersaaronDesktopPytoon-cadevenvScripts>test.py ssss dddd
    ssss

      我们将sys.argv[1]调整为sys.argv[1:]

    c:UsersaaronDesktopPytoon-cadevenvScripts>test.py ssss dddd
    ['ssss', 'dddd']

      看起来成功了。这样看来sys.argv更加像一个列表了。

    •   sys.exit()

      执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法。退出程序引发SystemExit异常,(这是唯一一个不会被认为是错误的异常), 如果没有捕获这个异常将会直接退出程序执行,当然也可以捕获这个异常进行一些其他操作(比如清理工作)。sys.exit()函数是通过抛出异常的方式来终止进程的,也就是说如果它抛出来的异常被捕捉到了的话程序就不会退出了,而是去进行一些清理工作。SystemExit 并不派生自Exception 所以用Exception捕捉不到该SystemEixt异常,应该使用SystemExit来捕捉。该方法中包含一个参数status,默认为0,表示正常退出, 其他都是异常退出。还可以这样使用:sys.exit("Goodbye!"); 一般主程序中使用此退出.

    •   sys.path

      sys.path是python的搜索模块的路径集。是一个list。

      注释:我们在import模块的时候流程是:首先会从python的内置模块中查找是否含义该模块的定义若未查询到会从sys.path对应的模块路径查询是否含有对应模块的定义,如果搜索完成依然没有对应A模块时则抛出import的异常。

      下面我们看看sys.path路径里面有什么? 我们看到里面很多地址信息。

    import sys
    print(sys.path)
    
    ['D:\python3study', 'D:\python3study', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\python38.zip', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\DLLs', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\lib', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38', 'D:\python3study\venv', 'D:\python3study\venv\lib\site-packages', 'D:\python3study\venv\lib\site-packages\setuptools-40.8.0-py3.8.egg', 'D:\python3study\venv\lib\site-packages\pip-19.0.3-py3.8.egg']

      既然sys.path本身是一个列表,那么我们来看看这个sys.path这个对象包含了什么方法:

    import sys
    print(dir(sys.path))
    
    ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

      添加路径

    import sys
    sys.path.append("c:\test")
    print(sys.path)
    
    ['D:\python3study', 'D:\python3study', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\python38.zip', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\DLLs', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\lib', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38', 'D:\python3study\venv', 'D:\python3study\venv\lib\site-packages', 'D:\python3study\venv\lib\site-packages\setuptools-40.8.0-py3.8.egg', 'D:\python3study\venv\lib\site-packages\pip-19.0.3-py3.8.egg', 

    'c:\test']

      删除路径

    import sys
    sys.path.remove("c:\test")
    print(sys.path)
    
    ['D:\python3study', 'D:\python3study', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\python38.zip', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\DLLs', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38\lib', 'C:\Users\aaron\AppData\Local\Programs\Python\Python38', 'D:\python3study\venv', 'D:\python3study\venv\lib\site-packages', 'D:\python3study\venv\lib\site-packages\setuptools-40.8.0-py3.8.egg', 'D:\python3study\venv\lib\site-packages\pip-19.0.3-py3.8.egg']

      sys.stdin,sys.stdout,sys.stderr

      这三个对象属于类文件流对象。分别表示标准UNIX概念中的标准输入,标准输出,标准错误。

    比如我们熟知的print()函数就是调用了sys.stdout.write方法。

      该三个对象优势在于可以将输出内容重定向到文件当中。

  • 相关阅读:
    cf1131f 构造+并查集
    多源最短路小结
    bzoj2200拓扑排序+最短路+联通块
    cf478d 线性dp好题
    cf919D 线性dp+拓扑排序
    hiho1460 rmq模板题
    最小标示法模板 poj1509
    JAVA动态代理机制分析guide
    java动态代理(JDK和cglib)
    AOP面向切面编程
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12276099.html
Copyright © 2011-2022 走看看