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

------------------------------------------------------------------------------------------------------

时间: 2024-08-24 12:49:19

Python——标准库 Sys模块的相关文章

Python 标准库 ConfigParser 模块 的使用

Python 标准库 ConfigParser 模块 的使用 demo #!/usr/bin/env python # coding=utf-8 import ConfigParser import sys config = ConfigParser.ConfigParser() #写入 config.add_section("Inc_basic") config.set("Inc_basic","name","iPIN")

[python标准库]XML模块

1.什么是XML XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分.您可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息. XML有以下几个特点. XML的设计宗旨是传输数据,而非显示数据. XML标签没有被预定义.您需要自行定义标签. XML被设计为具有自我描述性. XML是W3C的推荐标准. 其解析流程如下图: 2.常用解析XML的Python包 Python的标准库中,提供了6种

【python】Python标准库defaultdict模块

来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会带来很多的便利,多看看很有好处. defaultdict是其中一个方法,就是给字典value元素添加默认类型,之前看到过但是没注意怎么使用,今天特地瞅了瞅. 首先是各大文章介绍的第一个例子: 代码如下: import collections as coll def default_factory()

Python标准库--os模块

这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. 下面列出了一些在os模块中比较有用的部分.它们中的大多数都简单明了. os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd()函数得到当前工作

Python 标准库-sys

sys模块用于提供对解释器相关的操作 模块方法 解释说明 sys.argv 传递到Python脚本的命令行参数列表,第一个元素是程序本身路径 sys.executable 返回Python解释器在当前系统中的绝对路径 sys.exit([arg]) 程序中间的退出,arg=0为正常退出 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称,Linux是linux2,Windows是win32 sys.stdout.wr

[python标准库]Logging模块

1.模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据:logging则可以由开发者决定将信息输出到什么地方,以及怎么输出: 模块提供logger,handler,filter,formatter. logger

Python标准库sys

1.命令行参数sys.argv 我们从Python语言之模块第一部分的例子开始,看看sys.argv中到底存了些什么内容. 1 #Filename: using_sys.py 2 import sys 3 4 i=0 5 for item in sys.argv: 6 print('sys.argv[%d] : %s'%(i,item)) 7 i=i+1 输出: $python using_sys.py -param1 -param2 -param3 sys.argv[0] : using_sy

[python标准库]Time模块

在python中,通常有以下几种方式来表示时间: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 格式化时间:struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 字符串时间:xxx年xxx月xxxx日 import time s1 = time.localtime(23213123) # 将时间戳转化为结构化时间 s2 = time.mktime() # 将结构化时间转化为时间戳 s3 = time.str

Python标准库--re模块

re:正则表达式 __all__ = [ "match", "fullmatch", "search", "sub", "subn", "split", "findall", "finditer", "compile", "purge", "template", "escape&