主要介绍用的比较多的sys的模块命令包括:sys.argv,sys.platform,sys.getdefaultencoding,sys.setdefaultencoding(),sys.getfilesystemencoding(),sys.exit(n),sys.path,sys.modules.keys(),sys.stdin,sys.stdout,sys.stderr 等。

sys.argv 获取参数参数获取从0开始,而不是1,0为命令本身

#!/usr/bin/python

import sys

print "I the first arg :", sys.argv[1]

print "I the second arg :", sys.argv[2]

print "All of the args are :"

for i in sys.argv:

print i

执行结果:

[root@node1 python]# python arg.py hello python

I the first arg : hello

I the second arg : python

All of the args are :

arg.py

hello

python

sys.platform 获取当前操作系统平台

具体的返回值如下:

>>> import sys

>>> sys.platform

'linux2'

操作系统 返回值

Linux (2.x and 3.x)

'linux2'

Windows

'win32'

Windows/Cygwin

'cygwin'

Mac OS X

'darwin'

OS/2

'os2'

OS/2 EMX

'os2emx'

RiscOS

'riscos'

AtheOS

'atheos'

实例:根据不同操作系统判断该使用什么命令,例如在在linux 下用“clear”而在windows下用“cls”

#!/usr/bin/python

import sys

ostype = sys.platform

if ostype == "linux" or ostype == "linux2":

cmd = "clear"

else:

cmd = "cls"

print "The clear command is :", cmd

[root@node1 python]# python os.py

The clear command is : clear

sys.exit(n) 设置退出返回值(0表示正常退出,其他非0整数表示不正常,可以通过异常捕获)

#!/usr/bin/python

import sys

def exitFunc(value):

'''Clear function'''

print value

sys.exit()

print "hello"

try:

sys.exit(1)

except SystemExit,value:

exitFunc(value)

print "Ok"

[root@node1 python]# python esc.py

hello

1

sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值在通过命令"import module_name"时,系统将在以下路径中查找导入的模块,其中第一个为空,表示当前目录

>>> import sys

>>> sys.path

['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk',

'/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages',

'/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages']

sys.modules.keys() 使用sys模块查找已导入的模块>>> import sys

>>> print sys.modules.keys()

['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath',

'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport',

'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path',

'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os']

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

>>> import sys

>>> sys.getdefaultencoding()

'ascii'

sys.setdefaultencoding() 设置系统默认编码

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

>>> reload(sys)

>>> sys.setdefaultencoding('utf8')

sys.getfilesystemencoding() 获取文件系统使用编码方式>>> sys.getfilesystemencoding()

'UTF-8'

sys.stdin,sys.stdout,sys.stderr标准输入和标准错误 (通常缩写为 stdout 和 stderr) 是内建在每一个 UNIX 系统中的管道。

当你 print 某些东西时,结果前往 stdout 管道;

当你的程序崩溃并打印出调试信息 (例如 Python 中的 traceback (错误跟踪)) 的时候,信息前往 stderr 管道

stdout 是一个类文件对象;调用它的 write 函数可以打印出你给定的任何字符串。

实际上,这就是 print 函数真正做的事情;它在你打印的字符串后面加上一个硬回车,然后调用 sys.stdout.write 函数。

>>> for i in range(3):

... print'Dive in'

Dive in

Dive in

Dive in

>>> import sys

>>> for i in range(3):

... sys.stdout.write('Dive in')

Dive inDive inDive in

>>> for i in range(3):

... sys.stderr.write('Dive in')

Dive inDive inDive in

在最简单的例子中,stdout 和 stderr 把它们的输出发送到相同的地方

和 stdout 一样,stderr 并不为你添加硬回车;如果需要,要自己加上。

stdout 和 stderr 都是类文件对象,但是它们都是只写的。

它们都没有 read 方法,只有 write 方法。然而,它们仍然是类文件对象,因此你可以将其它任何 (类) 文件对象赋值给它们来重定向其输出。

使用sys重定向输出

print 'Dive in' # 标准输出

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() # 关闭日志文件。

重定向错误信息

fsock = open('error.log', 'w') # 打开你要存储调试信息的日志文件。

sys.stderr = fsock # 将新打开的日志文件的文件对象赋值给stderr以重定向标准错误。

raise Exception, 'this error will be logged' # 引发一个异常,没有在屏幕上打印出任何东西,所有正常的跟踪信息已经写进error.log

还要注意你既没有显式关闭日志文件,也没有将 stderr 设回最初的值。

这样挺好,因为一旦程序崩溃 (由于引发的异常),Python 将替我们清理并关闭文件打印到 stderr

向标准错误写入错误信息是很常见的,所以有一种较快的语法可以立刻导出信息

>>> print 'entering function'

entering function

>>> import sys

>>> print >> sys.stderr, 'entering function'

entering function

print 语句的快捷语法可以用于写入任何打开的文件 (或者是类文件对象)。

在这里,你可以将单个print语句重定向到stderr而且不用影响后面的print语句。

简明教程中的实例import sys

def readfile(filename):

'''Print a file to the standard output.'''

f = file(filename)

while True:

line = f.readline()

if len(line) == 0:

break

print line,

f.close()

if len(sys.argv) < 2:

print 'No action specified.'

sys.exit()

if sys.argv[1].startswith('--'):

option = sys.argv[1][2:]

if option == 'version':

print "Version 1.2"

elif option == 'help':

print '''\

This program prints file to the standard output.

Any number of files can be specified.

Options include:

--version : Prints the version number

--help : Display this help'''

else:

print 'Unknown option.'

else:

for filename in sys.argv[1:]:

readfile(filename)

执行结果:

[root@node1 python]# python cat.py

No action specified.

[root@node1 python]# python cat.py --help

This program prints file to the standard output.

Any number of files can be specified.

Options include:

--version : Prints the version number

--help : Display this help

[root@node1 python]# python cat.py --version

Version 1.2

[root@node1 python]# python cat.py --t

Unknown option.

[root@node1 python]# python cat.py /tmp/test.txt

hello girl!

hello boy!

hello man!

工作原理:定义readfile 函数逐行读取文件,执行脚本后,判断参数。

若参数长度小于2(命令本身占一个长度,也就是说,命令+参数),输出No action specified.

若参数是以“--”开头(通过sys.startswith 获取开头),则从该参数的第3个字符起截取,比如--help,得到的就是help

若取得的值为"help" 则显示帮助信息,若取得的值为"version",则显示版本信息

若没有匹配到任何选项,则显示“Unknown option”

若直接加文件名,则打印出文件内容

python中sys模块有什么用_Python 学习笔记 (8)—— sys模块相关推荐

  1. [转载] python中异常处理的四个句子_Python学习笔记总结(四)异常处理

    参考链接: 在Python中定义清理动作 1.基础 try/except/else:[else是可选的]捕捉由代码中的异常并恢复,匹配except里面的错误,并执行except中定义的代码,后继续执行 ...

  2. 在python中len表示的数据类型是_Python学习笔记——Python数据类型

    1.列表1.1取单个值 1.2切片获取子列表 1.3用len()函数获取列表长度 1.4列表的循环 1.5列表的链接和复制 1.6列表的增.删.查 1.7列表的排序--sort()方法 2.字符串2. ...

  3. python中如何创建一个空列表_Python学习笔记(1):列表的四种创建方法

    我的电脑安装的是Anaconda 3开源的Python发行版本,其中是集合3.6版本的Python与可视化编程工具采用的是Spyder. 打开Spyder可视化工具,新建一个空白文件,做好备注为&qu ...

  4. python常用开放工具_python学习笔记16-各种模块和开放工具收集整理

    一.调试,性能,日志 Debugger: pdb Logger: logging Profilers: profile, hotshot, cProfile 调试模块 pdb 允许你设置(条件)断点, ...

  5. python函数和模块的使用方法_Python学习06_函数和模块的使用

    引入 在写有些代码的时候,会发现有些步骤重复了多次,他也不像循环,都是相同的东西在重复,而是指做某件事情的步骤方法,做事的人或对象发生了改变,但是方法却没有改变. 要想写出高质量的代码,首先要解决的就 ...

  6. python中的ls是什么意思_Python学习之旅:使用Python实现Linux中的ls命令

    一.写在前面 在 Linux 中 ls 是一个使用频率非常高的命令了,可选的参数也有很多, 算是一条不得不掌握的命令.Python 作为一门简单易学的语言,被很多人认为是不需要认真学的,或者只是随便调 ...

  7. python中map函数返回值类型_Python学习第42课-map()函数

    [每天几分钟,从零入门python编程的世界!] 今天我们学习另一个比较常用的内置函数map(). ●描述 map()会根据提供的函数对指定迭代器做映射. 它有两个参数,第一个参数是一个函数,第二个参 ...

  8. python中demo函数是什么意思_Python学习09:定义函数

    这次我们在上一次创建的com.second.function下创建Demo02.py 在Python中,定义一个函数要使用 def 语句,依次使用函数名.括号.括号中的参数和冒号 : ,然后在缩进块中 ...

  9. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

最新文章

  1. 用 Dagger 2 实现依赖注入
  2. CSS background属性
  3. 图的邻接表存储与深度优先遍历代码实现
  4. shell 创建文件_如何在shell脚本中创建与shell脚本同目录或者同相对路径的文件夹或者文件?...
  5. 75个PPT下载丨2020中国系统架构师大会PPT分享(SACC2020)
  6. 苹果iOS 11.3.1正式发布,修复iPhone 8触屏bug
  7. 执行下面程序段后,y的结果是____。int x,y;x=y=2;x=x-2(y=y+1);printf(“%d“,y);A。3 B.2 C.1 D。0
  8. TensorFlow入门:计算图和梯度流
  9. 旅游景点网站景区景点购票系统毕业设计毕业论文参考(1)功能概要
  10. Hybrid App
  11. 插上移动硬盘计算机没反应,移动硬盘插电脑没反应怎么办解决教程
  12. ATMC/ATMP是啥?
  13. 计算机网络系统不可用,网络连接不可用,小编教你电脑网络连接不可用怎么办...
  14. android 控制POS机图文打印(一)
  15. C 语言吧 · 问题资料大全
  16. Java二叉树(递归实现)
  17. 红米2a支持html,红米2A支持4G吗?红米2A支持4G网络吗?
  18. 2021年苍南桥墩高中高考成绩查询,2021年温州各高中高考成绩排名及放榜最新消息...
  19. 关于金融风险数据的ETL到分析(下)
  20. 机器学习推荐算法之关联规则Apriori与FP-Growth算法详解

热门文章

  1. UIPower视觉设计 - 《UI的革命》文字版
  2. 这所计算机实力顶尖的大学,也成立人工智能学院
  3. volatile vs synchronized
  4. android简单的有道词典开发
  5. 超详细的Linux安装及配置【fastDFS+nginx】处理海量图片传输与存储【报错解决】
  6. 刷新存储器的容量单位是什么_存储器的容量和种类
  7. 详解静电放电保护(收藏)
  8. 落实“新基建”部署,坚持服务为本,推动新能源汽车充电桩建设
  9. 【程序人生】:牛人高会军
  10. ATmega16 定时计数器器应用