Python之SYS模块

Zss 发表于:

与Os模块的区别:

os就是一个普通的python库,用来向Python程序提供运行环境,特别是在文件系统、创建新进程、获取操作系统本身的一些信息(比如uname),并屏蔽各种不同操作系统之间的细节差异。

sys模块则是python程序用来请求解释器行为的接口。比如关于调试类的(trace, frames,except)等,profiling类(stats, getsizeof),运行时环境类(python path, stderr, stdout),解释器本身(如version)。inspect某种程度上可以看成是在sys提供的功能上的一个包装

os适合系统打交道,sys是和解释器打交道

1.sys.argv:实现从程序的外部传入参数

import sys

a,b,c = sys.argv[0],sys.argv[1],sys.argv[2]

print a
print b
print c

sys.argv[0],sys.argv[1],sys.argv[2]分别对应在外部的参数

第一个为py文件名  之后紧跟的输入的参数以空格来分割

也可以这样子来实现多个参数的传入,这样a就是一个列表

import sys

a = sys.argv[1:]
print a

从上例子看出实际sys.argv就是一个列表,只是在外部来传参

这样子我们就可以通过外部传入的参数来读取配置文件了

#coding:utf-8
import sys

path = sys.argv[1].replace('./','')

with open(path,'r+') as f:
    conf = f.read()
print(conf)

2.sys.path  返回一个环境变量的列表,导包的时候用处很大,获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到,sys.path.append(“自定义模块路径”)

import sys

for i in sys.path:
    print i

输出:
C:\Users\Zss-pc\Desktop\Py
C:\Users\Zss-pc\Desktop\Py
C:\windows\SYSTEM32\python27.zip
C:\Python27\DLLs
C:\Python27\lib
C:\Python27\lib\plat-win
C:\Python27\lib\lib-tk
C:\Python27
C:\Python27\lib\site-packages
C:\Python27\lib\site-packages\win32
C:\Python27\lib\site-packages\win32\lib
C:\Python27\lib\site-packages\Pythonwin
C:\Python27\lib\site-packages\wx-2.8-msw-unicode

3. sys.getdefaultencoding() / sys.setdefaultencoding() / sys.getfilesystemencoding()

sys.getdefaultencoding() :获取系统当前编码,一般默认为ascii。

sys.setdefaultencoding() :设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding(‘utf8’),此时将系统默认编码设置为utf8。(见设置系统默认编码 )

sys.getfilesystemencoding() :获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’

 

sys.platform :获取当前系统平台. 如:win32、Linux等。

#!/usr/bin/env python

import sys

print sys.getdefaultencoding()

reload(sys)
sys.setdefaultencoding('utf-8')

print sys.getdefaultencoding()

print sys.getfilesystemencoding()

print sys.platform 

输出
ascii
utf-8
mbcs
win32

4.sys.stdin, sys.stdout, sys.stderr
stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们.