python标准库对象导入语句_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模块使用详解

本文地址: http://www.cppcns.com/jiaoben/python/125223.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程服务器 上传公钥,SecureCRT+Ubuntu SSH服务器的远程公钥登陆

有耐心地往下看&#xff0c;哥是实现了的&#xff0c;并且所有细节会给的相当的丰富哈。Ubuntu: Ubuntu 14.04 LTSopensshWindow10(64位):SecureCRT8.0看网上的列为同牛们说gitssh用&#xff0c;自己搭建git服务器&#xff0c;so嗨&#xff0c;所以行动起来&#xff0c;先给win…

通用mapper如何处理多表条件查询通过list封装(强烈不推荐)(一对一,一对多)

一、思路1:在service封装通过list的组合&#xff0c;强烈不建议&#xff0c;有性能问题&#xff0c;例如&#xff1a;Autowiredprivate StudentDao studentDao;Autowiredprivate Stu_labelDao stu_labelDao;Autowiredprivate CityDao cityDao;Autowiredprivate ClazzDao clazzD…

理解卷积神经网络的利器:9篇重要的深度学习论文(上)

摘要&#xff1a; 为了更好地帮助你理解卷积神经网络&#xff0c;在这里&#xff0c;我总结了计算机视觉和卷积神经网络领域内许多新的重要进步及有关论文。手把手教你理解卷积神经网络(一)手把手教你理解卷积神经网络(二)本文将介绍过去五年内发表的一些重要论文&#xff0c;并…

理解卷积神经网络的利器:9篇重要的深度学习论文(下)

摘要&#xff1a; 为了更好地帮助你理解卷积神经网络&#xff0c;在这里&#xff0c;我总结了计算机视觉和卷积神经网络领域内许多新的重要进步及有关论文。手把手教你理解卷积神经网络(一)手把手教你理解卷积神经网络(二)继“理解卷积神经网络的利器&#xff1a;9篇重要的深度…

工作流实战篇_01_flowable 流程Demo案例

由于群里有些朋友对这个flowable还不是 很熟悉&#xff0c;在群里的小伙伴的建议下&#xff0c;师傅(小学生05101)制作一个开源的项目源码&#xff0c;一共大家学习和交流&#xff0c;希望对有帮助&#xff0c;少走弯路 如果有不懂的问题可以入群&#xff1a;633168411 里面都是…

antd 进行ajax请求,react+dva+antd接口调用方式

一丶 安装通过 npm 安装 dva-cli 并确保版本是0.8.1或以上。$ npm install dva-cli -g$ dva -v0.8.1二丶创建新应用安装完dva-cli之后&#xff0c;就可以在命令行里访问到dva命令(不能访问&#xff1f;)。现在&#xff0c;你可以通过dva new创建新应用。$ dva new dva-quicksta…

基于MaxCompute的拉链表设计

摘要&#xff1a; 简单的拉链表设计 背景信息&#xff1a; 在数据仓库的数据模型设计过程中&#xff0c;经常会遇到这样的需求&#xff1a; 数据量比较大; 表中的部分字段会被update,如用户的地址&#xff0c;产品的描述信息&#xff0c;订单的状态、手机号码等等; 需要查看…

2019全球编程语言高薪排行榜登场;余承东正式宣布华为IFA2019 或发布麒麟990;OPPO、vivo和小米成立互传联盟…...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 全新的索尼PS5&#xff08;图…

python文件输出log_Python同时向控制台和文件输出日志logging的方法

#-*- coding:utf-8 -*- import logging # 配置日志信息 logging.basicConfig(levellogging.DEBUG, format%(asctime)s %(name)-12s %(levelname)-8s %(message)s, datefmt%m-%d %H:%M, filenamemyapp.log, filemodew) # 定义一个Handler打印INFO及以上级别的日志到sys.stderr c…

MaxCompute使用常见问题总结

摘要&#xff1a; Maxcompute常见问题的总结&#xff0c;方便广大用户可以快速排查问题 计费相关 存储计费&#xff1a;按照存储在 MaxCompute 的数据的容量大小进行阶梯计费。 计算计费&#xff1a;MaxCompute 分按量后付费和按 CU 预付费两种计算计费方式。 按量后付费&#…

工作流实战_02_flowable 流程模板导入

由于群里有些朋友对这个flowable还不是很熟悉&#xff0c;在群里的小伙伴的建议下&#xff0c;师傅(小学生05101)制作一个开源的项目源码&#xff0c;一共大家学习和交流&#xff0c;希望对有帮助&#xff0c;少走弯路 如果有不懂的问题可以入群&#xff1a;633168411 里面都是…

华为服务器raid1装系统,服务器raid1系统安装

服务器raid1系统安装 内容精选换一换需要创建两台ECS&#xff0c;一台使用Linux系统安装SAP应用与DB2&#xff0c;另外一台用于安装SAP GUI和作为跳板机&#xff0c;两台ECS详情如下所示&#xff0c;下表均为示例&#xff0c;请根据实际情况购买Avago 3408iMR RAID卡不支持虚拟…

关于大数据你应该了解的五件事儿

摘要&#xff1a; 本文从基本概念、行业趋势、学习途径等几个方面介绍了大数据的相关内容&#xff0c;适合对大数据感兴趣的读者作为入门材料阅读。随着科技的发展&#xff0c;目前已经步入了大数据的时代&#xff0c;很多社交媒体和互联网公司也非常关注大数据这一行业。那么对…

当我们谈AI时,到底该谈什么?

报名倒计时仅剩1天&#xff0c;即刻扫描下方二维码&#xff0c;或者点击【阅读原文】免费报名&#xff0c;让我们不见不散。

前端电子表数字字体_爬虫:如何优雅应对字体反爬

目录THE BEGIN一 什么是字体反爬二 如何解密1.人工解密2.工具解密三 建立映射关系四 解密THE BEGIN网页数据爬取可以简单分为三步&#xff1a;抓取页面&#xff0c;分析页面&#xff0c;存储数据。其中第一二步最为头疼&#xff0c;因为每个站点各有特色&#xff0c;你要不断检…

ECS云资源可视化--资源概览

摘要&#xff1a; 随着越来越多的业务接入云计算&#xff0c;云上拥有的各类资源也越来越多&#xff0c;用户如何时时对其拥有的各类资源进行统计分析成为一个难题。ECS控制台针对这一问题&#xff0c;推出资源概览功能&#xff0c;目前支持实例和存储两种云资源的统计和分析功…

工作流实战_03_flowable 流程模板部署

由于群里有些朋友对这个flowable还不是 很熟悉&#xff0c;在群里的小伙伴的建议下&#xff0c;师傅(小学生05101)制作一个开源的项目源码&#xff0c;一共大家学习和交流&#xff0c;希望对有帮助&#xff0c;少走弯路 如果有不懂的问题可以入群&#xff1a;633168411 里面都是…

将服务器get到的响应打印,得到HttpResponse的响应主体

6 个答案:答案 0 :(得分&#xff1a;24)首先&#xff0c;查看您的服务器是否未返回空白响应&#xff1a;response.getEntity().getContentLength(); //it should not be 0其次&#xff0c;尝试以下操作将响应转换为字符串&#xff1a;StringBuilder sb new StringBuilder();tr…

为物联网而生:高性能时间序列数据库HiTSDB商业化首发!

摘要&#xff1a; 近日&#xff0c;阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 近日&#xff0c;阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 先跟大家聊一…

kafka系统设计开篇

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 靳刚同学MQ&#xff08;消息队列&#xff09;是跨进程通信的方式之一&#xff0c;可理解为异步rpc&#xff0c;上游系统对调用结果的态度往往是重要不紧急。使用消息队列有以下好处&#xff1a;业务解耦、流量削峰、灵活扩展…