Python中sys模块

Posted weststar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中sys模块相关的知识,希望对你有一定的参考价值。

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

(1)sys.argv          获取当前正在执行的命令行参数的参数列表(list)

argv[0]表示代码本身的文件路径,最多只能传入两个命令行参数

技术图片

(2) sys.modules.keys()   返回所有已经导入的模块列表

1 >>> import os,sys
2 >>> sys.modules.keys()
3 dict_keys([sys, builtins, _frozen_importlib, _imp, _thread, _warnings, _weakref, zipimport,
_frozen_importlib_external, _io, marshal, nt, winreg, encodings, codecs, _codecs, encodings.aliases,
encodings.utf_8, _signal, __main__, encodings.latin_1, io, abc, _abc, site, os, stat, _stat,
ntpath, genericpath, os.path, _collections_abc, _sitebuiltins, atexit])

 

(3)sys.platform     获取当前执行环境的平台 

(4)sys.path   path是一个目录列表,供Python从中查找第三方扩展模块。

(5) sys.exit(n)   调用sys.exit(n)可以中途退出程序,sys.exit(0)表示正常退出,n不为0时,会引发SystemExit异常,从而在主程序中可以捕获该异常。

1 import sys
2 print("running ...")
3 try:
4     sys.exit(1)
5 except SystemExit:
6     print("SystemExit exit 1")
7 print("exited")

 

输出结果:

1 E:\\s14+\\venv\\Scripts\\python.exe E:/s14/模块分类/SYS_M/test2.py
2 running ...
3 SystemExit exit 1
4 exited
5 
6 Process finished with exit code 0

 

(6)sys.version    获取python解释程序的版本信息

(7) sys.stdin, sys.stdout, sys.stderr    标准输入,标准输出,错误输出

标准输入:一般为键盘输入,stdin对象为解释器提供输入字符流,一般使用raw_input()和input()函数

 1 import sys
 2 print("Please input you name:")
 3 name = sys.stdin.readline()
 4 print(name)
 5 》》》》
 6 Please input you name:
 7 Xiao Ming            #用户输入,然后Enter
 8 Xiao Ming
 9  
10  
11 Process finished with exit code 0

 

 

标准输出:一般为屏幕。stdout对象接收到print语句产生的输出

1 import sys
2  
3 sys.stdout.write("123456\\n")
4 sys.stdout.flush()
5 执行结果
6 123456
7  
8 Process finished with exit code 0

 

 

错误输出:一般是错误信息,stderr对象接收出错的信息。

sys.stdout与print

当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+‘\\n‘) ;print 将你需要的内容打印到了控制台,然后追加了一个换行符;print 会调用 sys.stdout 的 write 方法

以下两行在事实上等价:

1  sys.stdout.write(hello+\\n) 
2  
3  print hello

 

sys.stdin与raw_input

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

以下两组在事实上等价:

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

 

从控制台重定向到文件:

  原始的sys.stdout指向控制台。如果把文件的对象引用赋给sys.stdout,那么print调用的就是文件对象的write方法

1 import sys
2  
3 f_handler = open(out.log,w)
4 sys.stdout = f_handler
5 print("hello")
6 # this hello can‘t be viewed on console
7 # this hello is in file out.log

如果想要在控制台打印一些东西的话,最好先将原始的控制台对象引用保存下来,向文件中打印后再恢复sys.stdout:

1 __console__=sys.stdout 
2 
3 # redirection start # 
4 
5 ... 
6 
7 # redirection end 
8 
9 sys.stdout=__console__

 



q

以上是关于Python中sys模块的主要内容,如果未能解决你的问题,请参考以下文章

Python中常用的模块(sys模块)

Python模块学习sys模块

python3中SYS模块

python sys.modules模块

python 标准库模块之 sys 模块

python-sys模块