python笔记 - sys模块

负责程序与python解释器的交互

常用方法:

  • sys.argv
  • sys.platform
  • sys.path
  • sys.exit(n)
  • sys.stdin | sys.stdout | sys.stderr



  1. sys.arge 实现从程序外部向程序内部传递参数
#text.py
import sys

print(sys.argv[0])  #文件名总是列表的第一个参数
print(sys.argv[1]) 
print(sys.argv[2])
print(sys.argv[1:]) 

运行:

>>> text.py -p 80
text.py
-p
80
['-p','80']


  1. sys.platform 返回当前操作平台名称,windows 返回 win32linux 返回 linux2
#text.py   win 10 64bit

>>> import sys
>>> print(sys.platform)

运行:

>>> text.py
win32
#text.py kali linux 2016.2

>>> import sys
>>> print(sys.platform)

运行:

>>> text.py
linux2


  1. sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
#text.py
import sys
print(sys.path)

运行:

>>> text.py
['', 'C:\\Users\\Administrator\\Desktop', 'E:\\python\\python36.zip', 'E:\\python\\DLLs', 'E:\\python\\lib', 'E:\\python', 'E:\\python\\lib\\site-packages', 'E:\\python\\lib\\site-packages\\pip-9.0.1-py3.6.egg']
  • 通过 sys.path.append(“自定义模块路径”) 可以自定义添加模块路径

  1. sys.exit(n)控制程序可以中途退出,n = 0时 程序正常退出,非 0 时引发SystemExit异常,可以在主程序中捕获
#text.py
import sys

def num(number):
    print(number)
    sys.exit(0)

print("[*]先执行我!")

try:
    sys.exit(1)
except SystemExit as number:
    num(number)

print("[*]我没有执行!")

运行:

>>> text.py
[*]先执行我!
1


    • sys.stdin    标准输入
    • sys.stdout  标准输出
    • sys.stderr  错误输出
>>> print("hi~ %s" % input("input:"))     #python 3

>>> print("hi~ %s" % raw_input("input:")) #python2.7

#相当于

import sys

print("input:")
name = sys.stdin.readline()
print("hi~ %s" % name)

运行:

>>> input:assas
hi~ assas # python3
hi~ assas # python2.7
hi~ assas # sys.stdin

print("hello")

#相当于

import sys
sys.stdout.write("hello")

运行:

>>> hello #print
>>> hello #sys.stdout


stdin,stdout, stderr在Python中都是文件属性的对象,他们在Python启动时自动与Shell环境中的标准输入,输出,出错 关联。而Python程序的在Shell中的I/O重定向与DOS命令的重定向完全相同,
其实这种重定向是由Shell来提供的,与Python 本身并无关系。

#Python 2.7.14
>>> import sys
>>> sys.stdin
', mode 'r' at 0x00000000058DB030>
>>> sys.stdout
', mode 'w' at 0x00000000058DB0C0>
>>> sys.stderr
', mode 'w' at 0x00000000058DB150>

你可能感兴趣的:(python笔记 - sys模块)