博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python -- sys模块
阅读量:4652 次
发布时间:2019-06-09

本文共 7293 字,大约阅读时间需要 24 分钟。

sys介绍:

  sys是system的缩写,用来获取和编译器的一些配置,设置及操作。如判断文件和文件夹是否存在,创建文件文件夹,获取系统版本之类的操作。

     Python的sys模块提供访问解释器使用或维护的变量,和与解释器进行交互的函数。通俗来讲,sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python运行时的环境。

 

sys模块的常见函数列表

  • sys.argv: 实现从程序外部向程序传递参数。

  • sys.exit([arg]): 程序中间的退出,arg=0为正常退出。

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

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

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

  • sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

  • sys.platform: 获取当前系统平台。

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

 

sys.argv

功能:在外部向程序内部传递参数,sys.argv用来获取当前运行程序的参数列表,其中

      sys.argv[0]表示当前程序名
      sys.argv[1]表示第一个参数
      sys.argv[2]表示第二个参数 。。。

示例:

1 #!/usr/bin/env python2 3 import sys4 print sys.argv[0]5 print sys.argv[1]

 

 

sys.exit()

功能:执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)

示例:

1 #!/usr/bin/env python 2  3 import sys 4  5 def exitfunc(value): 6     print value 7     sys.exit(0) 8  9 print "hello"10 11 try:12     sys.exit(1)13 except SystemExit,value:14     exitfunc(value)15 16 print "come?"

 

 

sys.path

功能:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

示例:

1 >>> import sys2 >>> sys.path

 

 

sys.modules

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

示例:

1 #!/usr/bin/env python2 3 import sys4 5 print sys.modules.keys()6 7 print sys.modules.values()8 9 print sys.modules["os"]

 

 

sys.getdefaultencoding()

功能:获取系统当前编码。

示例:

1 import sys2 3 a = sys.getdefaultencoding()4 5 print(a)

 

 

 

sys.getfilesystemencoding()

功能:获取系统文件当前编码。

示例:

import sysb = sys.getfilesystemencoding()print(b)

 

 

 

sys.path

功能:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

示例:

import sysb = sys.pathprint(b)

 

 

sys.stdout

说明:

当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+'\n')

print 将你需要的内容打印到了控制台,然后追加了一个换行符

print 会调用 sys.stdout 的 write 方法

以下两行在事实上等价:

sys.stdout.write('hello'+'\n') print 'hello'

重定向到控制台:sys.stdout指向控制台,如果将文件对象的引用赋值给sys.stdout,那么就会输出到文件。如果输出到文件之后还想在控制台输出内容,那么应该将控制台的对象引用保存下来。

# -*- coding = UTF-8 -*-import sysf_handler = open('out.log','w')__console__ = sys.stdoutsys.stdout = f_handlerprint 'hello'#这一行将会输出到文件,和调用文件的write方法相同sys.stdout = __console__print 'hello'#这一行输出到控制台

重定向到文件:

saveout = sys.stdout        # 终在重定向前保存stdout,这样的话之后你还可以将其设回正常fsock = open('out.log', 'w')      # 打开一个新文件用于写入。如果文件不存在,将会被创建。如果文件存在,将被覆盖。sys.stdout = fsock                 # 所有后续的输出都会被重定向到刚才打开的新文件上。print('This message will be logged instead of displayed')    # 这样只会将输出结果“打印”到日志文件中;屏幕上不会看到输出sys.stdout = saveout   # 在我们将 stdout 搞乱之前,让我们把它设回原来的方式。    fsock.close()     # 关闭日志文件。

 

 

sys.stdin

sys.stdin 与 raw_input  : 

当我们用 raw_input('Input promption: ') 时,事实上是先把提示信息输出,然后捕获输入

以下两组在事实上等价:

1 hi=raw_input('hello? ')2 3 print 'hello? ', #comma to stay in the same line4 hi=sys.stdin.readline()[:-1] # -1 to discard the '\n' in input stream

 

 

完整版参考:

1 #!/usr/bin/env python  2 # coding=utf-8  3 __author__ = 'Luzhuo'  4 __date__ = '2017/5/8'  5 # sys_demo.py sys解释器相关函数  6 # 该模块含有解释器的一些变量,与解释器交互的函数  7   8   9 import sys 10  11  12 def sys_demo(): 13     # 默认编码 14     print(sys.getdefaultencoding()) 15  16     # Python版本 17     print(sys.version) 18  19     # 添加模块路径到搜索路径 20     sys.path.append("./module") 21  22     # (函数)打印异常信息 23     try: 24         1 / 0 25     except: 26         types, value, back = sys.exc_info()  # 捕获异常 27         sys.excepthook(types, value, back)  # 打印异常 28  29     # 输入和输出 30     sys.stdout.write(">> ") 31     sys.stdout.flush() 32     strs = sys.stdin.readline()[:-1] 33     sys.stderr.write("输入的内容为: {}".format(strs)) 34     sys.stderr.flush() 35  36  37 def sys_func(): 38     lists = sys.argv  # 传递给Python脚本的命令行参数列表 => python p.py -> ['p.py'] / python p.py a 1 -> ['p.py', 'a', '1'] / 程序内执行 -> [''] 39     strs = sys.getdefaultencoding()  # 默认字符集名称 40     strs = sys.getfilesystemencoding()  # 系统文件名字符集名称 41     num = sys.getrefcount(object)  # 返回object的引用计数(比实际多1个) 42     dicts = sys.modules  # 已加载的模块, 可修改, 但不能通过修改返回的字典进行修改 43     lists = sys.path  # 模块搜索路径 44     sys.path.append("./test")  # 动态添加模块搜索路径 45     strs = sys.platform  # 平台标识符(系统身份进行详细的检查,推荐使用) Linux:'linux' / Windows:'win32' / Cygwin:'cygwin' / Mac OS X:'darwin' 46     strs = sys.version  # python解释器版本 47     lists = sys.thread_info  # 线程信息 48     num = sys.api_version  # 解释器C API版本 49  50     types, value, back = sys.exc_info()  # 捕获异常 详见 异常 文章的 excep() 代码块第二小部分(http://blog.csdn.net/rozol/article/details/69313164) 51     sys.excepthook(types, value, back)  # 打印异常 52     types = sys.last_type 53     value = sys.last_value 54     back = sys.last_traceback 55     # sys.exit([arg]) // 引发SystemExit异常退出Python(可以try), 范围[0,127], None==0, "string"==1 56     sys.exit(0) 57  58     num = sys.getrecursionlimit()  # 最大递归数(堆栈最大深度), 详见 函数 文章(http://blog.csdn.net/rozol/article/details/69242050) 59     sys.setrecursionlimit(5000)  # 修改最大递归数 60  61     fnum = sys.getswitchinterval()  # 获取线程切换间隔 62     sys.setswitchinterval(0.005)  # 设置线程切换间隔, 单位秒 63     num = sys.getcheckinterval()  # 解释器的检查间隔 64     sys.setcheckinterval(100)  # 设置解释器检查间隔, 执行(默认)100个虚拟指令执行一次检查, 值为<=0时,检查每个虚拟指令 65  66     # sys.stdin // 标准输入流 67     strs = sys.stdin.readline()[:-1] 68     # sys.stdout // 标准出入输出 69     sys.stdout.write(">>") 70     sys.stdout.flush() 71     # sys.stderr // 标注错误流 72     sys.stderr.write(">>") 73  74     # --- 75  76     lists = sys.builtin_module_names  # 所有模块 (注:非导入模块) 77     path = sys.base_exec_prefix  # Python安装路径 78     path = sys.base_prefix  # 同base_exec_prefix 79     path = sys.exec_prefix  # 同base_exec_prefix 80     path = sys.prefix  # 同base_exec_prefix 81     path = sys.executable  # Python解释器的绝对路径 82  83     strs = ys.byteorder  # 本机字节顺序指示器, big-endian(最高有效字节在第一位)值为'big', little-endian(最低有效字节在第一位)值为'little' 84     strs = sys.copyright  # python版权 85     num = sys.hexversion  # 16进制版本号 86     lists = sys.implementation  # 当前运行的解释器的信息 87     num = sys.getallocatedblocks()  # 解释器当前分配的内存块的数量 88     boolean = sys.dont_write_bytecode  # 是否不会尝试导入源模块是写入.pyc文件 (False会写入.pyc文件) 89     # sys.getsizeof(object[, default]) // 返回对象的大小bit, 只计算自身内存消耗,不计算引用对象的内存消耗, 调用对象的__sizeof__(), default没有获取到默认返回值 90     num = sys.getsizeof(object) 91     boolean = sys.is_finalizing()  # 解释器是否正在被关机 92     num = sys.maxsize  # 最大整数值(2 ** 31 -1), 与系统有关 93     num = sys.maxunicode  # 最大Unicode值的整数 (1114111) 94     strs = sys.ps1  # 解释器主提示符 95     strs = sys.ps2  # 解释器次提示符 96  97     sys.call_tracing(func, ("arg",))  # 调用函数 98     sys._clear_type_cache()  # 清除内部类型缓存 99     sys._debugmallocstats()  # 打印CPython内存分配器状态的低级信息100 101     sys.setprofile(profilefunc)  # 设置profile函数, 默认None102     sys.getprofile()  # 获取profile函数103     sys.settrace(tracefunc)  # 设置跟踪函数, def tracefunc(frame、event 和arg):104     sys.gettrace()  # 获取跟踪函数, 默认None105     sys.set_coroutine_wrapper(wrapper)  # 设置包装 def wrapper(coro):106     sys.get_coroutine_wrapper()  # 包装, 默认None107 108 109 if __name__ == "__main__":110     sys_demo()111 112     # sys_func()

 

转载于:https://www.cnblogs.com/moying-wq/p/9919723.html

你可能感兴趣的文章
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>
第一次软件工程作业(改进版)
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
引入css的四种方式
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
jsp 环境配置记录
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
2.抽取代码(BaseActivity)
查看>>
夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
查看>>