Python——标准库 Sys模块
------------------------------------------------------------------------------------------------------
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分.
处理命令行参数
在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称.
------------------------------------------------------------------------------------------------------
使用sys模块获得脚本的参数
------------------------------------------------------------------------------------------------------
print "script name is",
sys.argv[0]
# 使用sys.argv[0]采集脚本名称
if len(sys.argv) > 1:
print "there
are", len(sys.argv)-1,
"arguments:" #
使用len(sys.argv)-1采集参数个数-1为减去[0]脚本名称
for arg in
sys.argv[1:]: #输出除了[0]外所有参数
print arg
else:
print "there
are no arguments!"
如果是从标准输入读入脚本 (比如 "python <
sys-argv-example-1.py"), 脚本的名称将被设置为空串.
如果把脚本作为字符串传递给python (使用 -c
选项), 脚本名会被设置为 "-c".
------------------------------------------------------------------------------------------------------
处理模块
path 列表是一个由目录名构成的列表, Python
从中查找扩展模块( Python 源模块, 编译模块,或者二进制扩展).
启动 Python 时,这个列表从根据内建规则,
PYTHONPATH 环境变量的内容, 以及注册表( Windows 系统)等进行初始化.
由于它只是一个普通的列表,
你可以在程序中对它进行操作,
------------------------------------------------------------------------------------------------------
使用sys模块操作模块搜索路径
------------------------------------------------------------------------------------------------------
print "path has", len(sys.path), "members"
sys.path.insert(0,
"samples") #将路径插入到path,[0]中
import sample
sys.path =
[] #删除path中所有路径
import random
------------------------------------------------------------------------------------------------------
使用sys模块查找内建模块
builtin_module_names
列表包含 Python 解释器中所有内建模块的名称
------------------------------------------------------------------------------------------------------
def dump(module):
print
module, "=>",
if module in
sys.builtin_module_names: #查找内建模块是否存在
print ""
else:
module = _ _import_
_(module) #非内建模块输出模块路径
print module._ _file_ _
dump("os")
dump("sys")
dump("string")
dump("strop")
dump("zlib")
os => C:\python\lib\os.pyc
sys =>
string => C:\python\lib\string.pyc
strop =>
zlib => C:\python\zlib.pyd
------------------------------------------------------------------------------------------------------
使用sys模块查找已导入的模块
modules 字典包含所有加载的模块. import
语句在从磁盘导入内容之前会先检查这个字典.
Python
在处理你的脚本之前就已经导入了很多模块.
------------------------------------------------------------------------------------------------------
print sys.modules.keys()
['os.path', 'os', 'exceptions', '_ _main_ _', 'ntpath', 'strop',
'nt',
'sys', '_ _builtin_ _', 'site', 'signal', 'UserDict', 'string',
'stat']
------------------------------------------------------------------------------------------------------
使用sys模块获得当前平台
------------------------------------------------------------------------------------------------------
sys.platform 返回当前平台 出现如: "win32"
"linux2" 等
------------------------------------------------------------------------------------------------------
处理标准输出/输入
标准输入和标准错误
(通常缩写为 stdout 和 stderr)
是内建在每一个 UNIX 系统中的管道。
当你 print 某些东西时,结果前往 stdout 管道;
当你的程序崩溃并打印出调试信息 (例如 Python 中的
traceback (错误跟踪))
的时候,信息前往 stderr 管道
------------------------------------------------------------------------------------------------------
>>> 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
是一个类文件对象;调用它的 write 函数可以打印出你给定的任何字符串。
实际上,这就是 print 函数真正做的事情;它在你打印的字符串后面加上一个硬回车,然后调用 sys.stdout.write 函数。
在最简单的例子中,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语句。
------------------------------------------------------------------------------------------------------
使用sys模块退出程序
------------------------------------------------------------------------------------------------------
import sys
sys.exit(1)
注意 sys.exit 并不是立即退出.
而是引发一个 SystemExit 异常.
这意味着你可以在主程序中捕获对 sys.exit 的调用
------------------------------------------------------------------------------------------------------
捕获sys.exit调用
------------------------------------------------------------------------------------------------------
import sys
print "hello"
try:
sys.exit(1)
except
SystemExit: # 捕获退出的异常
pass #
捕获后不做任何操作
print "there"
hello
there
如果准备在退出前自己清理一些东西(比如删除临时文件),
你可以配置一个 "退出处理函数"(exit handler), 它将在程序退出的时候自动被调用
------------------------------------------------------------------------------------------------------
另一种捕获sys.exit调用的方法
------------------------------------------------------------------------------------------------------
def exitfunc():
print
"world"
sys.exitfunc =
exitfunc #
设置捕获时调用的函数
print "hello"
sys.exit(1)
#
退出自动调用exitfunc()后,程序依然退出了
print "there" # 不会被
print
hello
world
------------------------------------------------------------------------------------------------------
Python——标准库 Sys模块的更多相关文章
- Python 标准库 ConfigParser 模块 的使用
Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import ...
- [python标准库]Pickle模块
Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...
- Python标准库——collections模块的Counter类
1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...
- [python标准库]XML模块
1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词. ...
- 【python】Python标准库defaultdict模块
来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...
- Python标准库--os模块
这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例 ...
- python标准库 bisect模块
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #bisect #作用:维护有序列表,而不必在每次向列表增加一个元素 ...
- python标准库 sysconfig模块
# -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'import sysconfig#sysconfig:解释器编译时配置#作 ...
- Python标准库 -- UUID模块(生成唯一标识)
UUID是什么: UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的UUID它可以保证在空间和时间上的唯一性,也称为GUID,全称为: UUID ...
随机推荐
- 【SQL】服务器环境下的SQL
一.大型数据库的三层体系结构 web服务器:比如在淘宝页面上,输入“牛肉干”,就是web服务器来处理,提交给应用服务器. 应用服务器:在获取到“牛肉干”这个请求后,应用服务器决定如何汇集结果,并进行相 ...
- 《Java编程思想》笔记 第十二章 通过异常处理错误
1.异常也是对象 标准异常类都有两个构造器,一个默认,一个接受字符串. 抛异常与方法返回类型不同,但有相似效果使当前方法退出并返回,抛异常可以看作是一种不同的返回机制.(异同点不必深究) Throwa ...
- mysql 使用set names 解决乱码问题
引子: 最近查询公司线上表数据,返现在Xshell控制台打印的数据都是乱码,记得之前瞄过同事都是执行set names UTF8 , 解决的,特记录如下.
- 学习apache commons lang3的源代码 (1):前言和R
本系列主要是针对lang3的3.7版本的源代码进行学习,并适当举例.一共大概150多个java文件,争取30天内学习完毕. 26个英文字母 争取每天学习1个字母开头的类们. 今天,就学习R开头的吧. ...
- 【hdoj_1049】Climbing Worm
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1049 以 上升-下降 一次为一个周期,一个周期时间为2分钟,每个周期上升距离为(u-d).先只考虑上升,再 ...
- Spark部署及应用
在飞速发展的云计算大数据时代,Spark是继Hadoop之后,成为替代Hadoop的下一代云计算大数据核心技术,目前Spark已经构建了自己的整个大数据处理生态系统,如流处理.图技术.机器学习.NoS ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...
- Storm学习中遇到的问题整理
在编写storm代码来进行实时分析的时候遇到了一些问题,有些的确令人比较头痛,现在稍微做一下整理.数据流向(本地-Spout-Bolt-Hdfs) 1数据的输入输出文件的路径选择 因为在此项目中数据是 ...
- HDU 2647 Reward【反向拓扑排序】
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 洛谷 P2415 集合求和【数学公式/模拟】
给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出 ...