python中sys模块的用法大全

2024-08-31 02:32
文章标签 python 模块 用法 大全 sys

本文主要是介绍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 p style='font-size:14px;font-style:normal;font-weight:normal;line-height:25.2px;padding:5px 0px 5px 0px;color:rgb(0, 0, 0);text-align:left;float:none;width:660px;height:0px;border-top:0px none rgb(0, 0, 0);border-bottom:0px none rgb(0, 0, 0);border-right:0px none rgb(0, 0, 0);border-left:0px none rgb(0, 0, 0);text-decoration:none;background:rgba(0, 0, 0, 0) none repeat 0% 0%;' ></p>

如果把脚本作为字符串传递给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.chinasem.cn/article/1122636

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10