Python标准库sys

sys 模块主要负责与 Python 解释器进行交互,该模块提供了一系列用于控制 Python 运行环境的函数和变量。

函数和对象清单

对象名称

对象说明

sys.argv

命令行参数List,第一个元素是程序本身路径 

sys.path

返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 

sys.modules

返回系统导入的模块字段,key是模块名,value是模块 

sys.exc_info()

获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息

sys.exit(n)

退出程序,正常退出时exit(0)

sys.hexversion

获取Python解释程序的版本值,16进制格式如:0x020403F0

sys.version

获取Python解释程序的版本信息

sys.platform

返回操作系统平台名称

sys.stdout

标准输出

sys.stdout.write()

标准输出内容

sys.stdout.writelines()

无换行输出

sys.stdin

标准输入

sys.stdin.read()

输入一行

sys.stderr

错误输出

sys.exc_clear()

用来清除当前线程所出现的当前的或最近的错误信息 

sys.exec_prefix

返回平台独立的python文件安装的位置 

sys.byteorder

本地字节规则的指示器

sys.copyright

记录python版权相关的东西 

sys.api_version

解释器的C的API版本 

sys.version_info

返回你当前所使用的Python版本号

sys.getdefaultencoding()

返回当前你所用的默认的字符编码格式 

sys.getfilesystemencoding()

返回将Unicode文件名转换成系统文件名的编码的名字 

sys.builtin_module_names

Python解释器导入的内建模块列表 

sys.executable

Python解释程序路径 

sys.getwindowsversion()

获取Windows的版本 

sys.stdin.readline()

从标准输入读一行

sys.setdefaultencoding()

用来设置当前默认的字符编码(详细使用参考文档) 

sys.displayhook(value)

如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)

主要对象和函数的说明

sys.flags

返回一个具名元组,python命令行的参数状态,这些属性是只读的:

flags.debug

-d

flags.inspect

-i

flags.interactive

-i

flags.isolated

-I

flags.optimize

-O 或 -OO

flags.dont_write_bytecode

-B

flags.no_user_site

-s

flags.no_site

-S

flags.ignore_environment

-E

flags.verbose

-v

flags.bytes_warning

-b

flags.quiet

-q

flags.hash_randomization

-R

flags.dev_mode

-X dev (Python 开发模式)

flags.utf8_mode

-X utf8

flags.safe_path

-P

flags.int_max_str_digits

-X int_max_str_digits (integer string conversion length limitation)

flags.warn_default_encoding

-X warn_default_encoding

sys.argv

获取运行 Python 程序的命令行参数。其中 :

sys.argv[0] 通常就是指该 Python 程序

sys.argv[1] 代表为 Python 程序提供的第一个参数

sys.argv[2] 代表为 Python 程序提供的第二个参数

……依此类推。

#sys.py
#!/usr/bin/env pythonimport sys
print sys.argv[0]
print sys.argv[1]# python sys.py argv1
sys.py
argv1

如果是通过 Python 解释器的命令行参数 -c 来执行的, argv[0] 会被设置成字符串 '-c' 。如果没有脚本名被传递给 Python 解释器, argv[0] 为空字符串。

sys.path

是搜索路径列表,每个元素都是一个目录名,在使用 import 语句导入模块时,解释器就会从这些路径列表中查找指定的模块。

>>>import sys
>>>sys.path
['/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev', '/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/third_party/thriftpy', '/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev']

 sys.exit(n)

执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)

import sysdef exitfunc(value):print valuesys.exit(0)print "hello"try:sys.exit(1)
except SystemExit,value:exitfunc(value)print "come?”# python exit.py
hello
1

exit()之后的代码不会被执行。

sys.modules

返回模块名和载入模块对应关系的字典

sys.modules
{'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_thread': <module '_thread' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_io': <module '_io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'posix': <module 'posix' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, 'time': <module 'time' (built-in)>, 'zipimport': <module 'zipimport' (frozen)>, '_codecs': <module '_codecs' (built-in)>, 'codecs': <module 'codecs' (frozen)>, ...>}

sys.platform

获取当前执行环境的平台

>>>sys.platform
'darwin'

系统

平台 值

AIX

'aix'

Emscripten

'emscripten'

Linux

'linux'

WASI

'wasi'

Windows

'win32'

Windows/Cygwin

'cygwin'

macOS

'darwin'

FreeBSD'freebsd'

对于 Unix 系统(除 Linux 和 AIX 外),该字符串是 Python 构建时的 uname -s 返回的小写操作系统名称,并附加了 uname -r 返回的系统版本的第一部分,如 'sunos5' 或 'freebsd8'.

在 3.8 版更改: 在 AIX 上,sys.platform 将不再包含主要版本号。 它将总是 'aix',而不是 'aix5' 或 'aix7'。

sys.stdin、sys.stdout、sys.stderr

标准输入、标准输出和标准错误的 文件对象:

  • stdin 用于所有交互式输入(包括对 input() 的调用);
  • stdout 用于 print() 和 expression 语句的输出,以及用于 input() 的提示符;
  • 解释器自身的提示符和它的错误消息都发往 stderr。
  • 这些流都是常规 文本文件,与 open() 函数返回的对象一致。

sys.version、sys.api_version、sys.version_info

解释器的版本信息

>>>sys.version
'3.11.4 (main, Jul  5 2023, 09:00:44) [Clang 14.0.6 ]’
>>>sys.api_version
1013
>>>sys.version_info
sys.version_info(major=3, minor=11, micro=4, releaselevel='final', serial=0)

版本号五部分的元组: majorminormicroreleaselevel 和 serial。 除 releaselevel 外的所有值均为整数;发布级别值则为 'alpha''beta''candidate' 或 'final'

sys.settrace(tracefunc)

设置系统的跟踪函数,使得用户在 Python 中就可以实现 Python 源代码调试器。该函数是特定于单个线程的.

跟踪函数应接收三个参数:frameevent 和 argframe 是当前的堆栈帧。event 是一个字符串:'call''line''return''exception' 或 'opcode'arg 取决于事件类型。

每次进入 trace 函数的新的局部作用范围,都会调用 trace 函数( event 会被设置为 'call' ),它应该返回一个引用,指向即将用在新作用范围上的局部跟踪函数;如果不需要跟踪当前的作用范围,则返回 None

局部跟踪函数应返回对自身的引用(或对另一个函数的引用,用来在其作用范围内进行进一步的跟踪),或者返回 None 来停止跟踪其作用范围。

如果跟踪函数出错,则该跟踪函数将被取消设置,类似于调用 settrace(None)

这些事件具有以下含义:

  • 'call'

表示调用了某个函数(或进入了其他的代码块)。全局跟踪函数将被调用,arg 为 None。返回值将指定局部跟踪函数。

  • 'line'

执行下一行代码

  • 'return'

表示某个函数(或别的代码块)即将返回。局部跟踪函数将被调用,arg 是即将返回的值,如果此次返回事件是由于抛出异常,arg 为 None。跟踪函数的返回值将被忽略。

  • 'exception'

表示发生了某个异常。局部跟踪函数将被调用,arg 是一个 (exception, value, traceback) 元组,返回值将指定新的局部跟踪函数。

  • 'opcode'

执行新的opcode

注意,由于异常是在链式调用中传播的,所以每一级都会产生一个 'exception' 事件。

更细微的用法是,可以显式地通过赋值 frame.f_trace = tracefunc 来设置跟踪函数,而不是用现有跟踪函数的返回值去间接设置它。当前帧上的跟踪函数必须激活,而 settrace() 还没有做这件事。注意,为了使上述设置起效,必须使用 settrace() 来安装全局跟踪函数才能启用运行时跟踪机制,但是它不必与上述是同一个跟踪函数(它可以是一个开销很低的跟踪函数,只返回 None,即在各个帧上立即将其自身禁用)。

# program to display the functioning of
# settrace()
from sys import settrace# local trace function which returns itself
def my_tracer(frame, event, arg=None):# extracts frame codecode = frame.f_code# extracts calling function namefunc_name = code.co_name# extracts the line numberline_no = frame.f_linenoprint(f"trace:A {event} encountered in {func_name}() at line number {line_no} , {arg=}")return my_tracer# global trace function is invoked here and
# local trace function is set for fun()
def foo(a:str):print('foo() run...')return a+"OK."# global trace function is invoked here and
# local trace function is set for check()
def call():print('call() run ...')return foo('test')# returns reference to local
# trace function (my_tracer)
settrace(my_tracer)call()‘’'
trace:A call encountered in call() at line number 28 , arg=None
trace:A line encountered in call() at line number 29 , arg=None
call() run ...
trace:A line encountered in call() at line number 30 , arg=None
trace:A call encountered in foo() at line number 21 , arg=None
trace:A line encountered in foo() at line number 22 , arg=None
foo() run...
trace:A line encountered in foo() at line number 23 , arg=None
trace:A return encountered in foo() at line number 23 , arg='testOK.'
trace:A return encountered in call() at line number 30 , arg='testOK.'
‘''

从上面的例子中可以看到,当运行到return时,可以从arg获取到return后面的返回内容。

如果要获得跟踪的函数内部信息,需要对frame进行分析:

  • f_code 该函数对应code object(类似字节码)
  • f_code.co_name:运行代码的函数名
  • f_code.co_filename:源代码文件名
  • f_code.co_varnames:函数的局部变量名
  • f_lineno:源代码代码行号
  • f_locals:运行代码的局部变量,是一个字典类型
  • f_globals:运行代码的全局变量,是一个字典类型,这个里面很大,有很多系统信息也存储在里面
  • f_builtins 该函数内置函数
  • f_back 调用这个函数的函数的frame
  • f_lasti last instruction类似汇编中program counter(函数执行到哪了下一步干嘛)

可以根据event设置过滤,如下面统计函数的执行时间:

import sys
import timestart_time = {}def trace_function(frame, event, arg):global start_timeif event == 'call':start_time[frame] = time.time()elif event == 'return':end_time = time.time()time_taken = end_time - start_time[frame]print('Function {} took {:.2f} seconds to execute'.format(frame.f_code.co_name, time_taken))return trace_functiondef function_to_trace():print('I am being traced!')time.sleep(1)sys.settrace(trace_function)
function_to_trace()
sys.settrace(None)

sys.exc_info()

本函数返回的元组包含三个值,它们给出当前正在处理的异常的信息。返回的信息仅限于当前线程和当前堆栈帧。如果当前堆栈帧没有正在处理的异常,则信息将从下级被调用的堆栈帧或上级调用者等位置获取,依此类推,直到找到正在处理异常的堆栈帧为止。此处的“处理异常”指的是“执行 except 子句”。任何堆栈帧都只能访问当前正在处理的异常的信息。

如果整个堆栈都没有正在处理的异常,则返回包含三个 None 值的元组。否则返回值为 (type, value, traceback)。它们的含义是:type 是正在处理的异常类型(它是 BaseException 的子类);value 是异常实例(异常类型的实例);traceback 是一个 回溯对象,该对象封装了最初发生异常时的调用堆栈。

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

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

相关文章

如何使用 Python 多处理模块

在本文[1]中&#xff0c;我们将学习如何使用多处理模块中的特定 Python 类&#xff08;进程类&#xff09;。我将通过示例为您提供快速概述。 什么是多处理模块&#xff1f; 还有什么比从官方文档中提取模块更好的方式来描述模块呢&#xff1f; Multiprocessing 是一个使用类似…

区块链技术研究探讨

介绍 区块链技术是一种去中心化的分布式账本技术&#xff0c;它通过将数据存储在多个参与者之间的区块链网络中&#xff0c;确保数据的透明性、安全性和不可篡改性。以下是关于区块链技术的一些重要信息&#xff1a; 1、 工作原理&#xff1a;区块链是由一系列按时间顺序链接…

21.4 CSS 盒子模型

1. 边框样式 border-style属性: 指定元素的边框样式.常用属性值: - none: 无边框(默认值). - solid: 实线边框. - dotted: 点状边框. - dashed: 虚线边框. - double: 双线边框. - groove: 凹槽状边框. - ridge: 脊状边框. - inset: 内阴影边框. - outset: 外阴影边框.这些值可…

python内置类属性

class Person:"""这是一个类&#xff0c;功能是描述一个人的精神面貌与行为"""age 19def __init__(self, name):self.name namedef run(self):print("run")"""__dict__ : 类属性__bases__ : 类所有父类构成元组__doc…

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

随机流-RandomAccessFile

RandomAccessFile RandomAccessFile 基本操作案例 RandomAccessFile 基本操作 案例 import java.io.*;public class TestMain09 {public static void main(String[] args) throws Exception {insert("D:\\home\\product\\aa.txt",2,"ni");}public static…

C++:类和对象(二)

本文主要介绍&#xff1a;构造函数、析构函数、拷贝构造函数、赋值运算符重载、const成员函数、取地址及const取地址操作符重载。 目录 一、类的六个默认成员函数 二、构造函数 1.概念 2.特性 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 五、赋值…

TS编译选项

自动监控编译 tsc xxx.ts -w 在一个文件夹下&#xff0c;创建 tsconfig.json 文件&#xff0c;在用命令 tsc 就可以自动编译当前文件夹下的ts文件 tsconfig.json文件配置如下&#xff1a; {/*tsconfig.json 是ts编译器的配置文件&#xff0c;ts编译器可以根据它的信息来对代…

Jenkins+maven+testng+htmlreport单元自动化测试

背景说明 为了可以在jenkins自动化运行单元测试的代码&#xff0c;所以使用maventestng的技术结合&#xff0c;达到手动或者定时去执行单元测试的代码&#xff0c;以便提高人工运行的自动化的效率。单元通过该方案也可以套用在httpclient框架去执行测试web api接口的自动化测试…

Kubernetes 工作中常见命令总结

① configmap 文件的操作命令&#xff1a;命名空间为platform&#xff0c;configmap的名称为openapi kubectl -n platform describe configmap openapi kubectl -n platform get configmap openapi -o yaml kubectl -n platform edit configmap openapi kubectl -n platform…

撰寫自己的Python C擴展!

撰寫自己的Python C擴展! 前言spam.cheaderC函數參數參數解析函數主體生成回傳值 method table模組定義模組初始化函數拋出異常main函數完整代碼 編譯及鏈接使用gcc使用gcc Python flags使用distutils 從Python調用C函數直接import使用distutils透過ctypes調用so檔 前言 本篇…

2022年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:城堡问题 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####—#####—#—#####—# 2 # # | # # # # # #—#####—#####—#####—# 3 # | | # # # # # #—#########—#####—#—# 4 # # | | | | # # ###########…

2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

Opencv图像暗通道调优

基于雾天退化模型的去雾算法&#xff0c;Opencv图像暗通道调优&#xff0c;&#xff08;清华版代码&#xff09;对普通相片也有较好的调优效果&#xff0c;相片更通透。 结合代码实际运行效果、算法理论模型、实际代码。我个人理解&#xff0c;实际效果是对图像的三个颜色通道…

04架构管理之分支管理实践-一种git分支管理最佳实践

专栏说明&#xff1a;针对于企业的架构管理岗位&#xff0c;分享架构管理岗位的职责&#xff0c;工作内容&#xff0c;指导架构师如何完成架构管理工作&#xff0c;完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作&#xff0c;专栏名称&#xff1a;架构管理…

PDF转Word的方法分享与注意事项。

PDF和Word是两种常用的文档格式&#xff0c;它们各有优点&#xff0c;适用于不同的场景。然而&#xff0c;有时候我们需要将PDF转换为Word&#xff0c;以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法&#xff0c;并分享一些注意事项。 一、PDF转Word的方法 使…

05-JVM内存分配机制深度剖析

上一篇&#xff1a;04-JVM对象创建深度剖析 1.对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配&#xff0c;当对象没有被引用的时候&#xff0c;需要依靠GC进行回收内存&#xff0c;如果对象数量较多的时候&#xff0c;会给GC带来较大压力&#xff…

按照xml文件和txt文件名,将对应名字的图象文件复制

按照xml文件和txt文件名&#xff0c;将对应名字的图象文件复制 需求分析解决方案 需求分析 就是已经标注了xml和txt文件&#xff0c;需要将其对应的图象文件挑选出来 解决方案 # 按照xml文件删除对应的图片 # coding: utf-8 from PIL import Image, ImageDraw, ImageFont imp…

k8s集群证书过期解决

一、k8s集群证书过期解决 问题现象 K8S集群证书过期后&#xff0c;会导无法创建Pod&#xff0c;通过kubectl get nodes也无法获取信息&#xff0c;甚至dashboard也无法访问。 执行命令发现报错&#xff1a; Unable to connect to the server: x509: certificate has expire…

使用ffmpeg截取视频片段

本文将介绍2种使用ffmpeg截取视频的方法 指定截取视频的 开始时间 和 结束时间&#xff0c;进行视频截取指定截取视频的 开始时间 和 截取的秒数&#xff0c;进行视频截取 两种截取方式的命令行如下 截取某一时间段视频 优先使用 ffmpeg -i ./input.mp4 -c:v libx264 -crf…