Python标准库sys

这篇具有很好参考价值的文章主要介绍了Python标准库sys。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python实用教程_spiritx的博客-CSDN博客

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 python

import 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 sys

def exitfunc(value):
    print value
    sys.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 code
    code = frame.f_code
    # extracts calling function name
    func_name = code.co_name
    # extracts the line number
    line_no = frame.f_lineno

    print(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 time

start_time = {}

def trace_function(frame, event, arg):
    global start_time
    if 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_function

def 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 是一个 回溯对象,该对象封装了最初发生异常时的调用堆栈。文章来源地址https://www.toymoban.com/news/detail-699248.html

到了这里,关于Python标准库sys的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python小知识】sys.argv[1]

    sys是python的一个【标准库】,是【system】的简写,封装了一些与系统相关的信息和接口。 argv是【argument variable】的缩写,意为“参数变量”,这个参数变量是一个List列表。 argv[0] 是“被调用脚本文件的相对路径或者绝对路径”,例如: 这里的有一个test.py脚本文件: 它的绝

    2023年04月08日
    浏览(18)
  • 详解Python中sys模块的功能与应用

    本文分享自华为云社区《深入Python:sys模块的功能与应用详解》,作者: 柠檬味拥抱。 在Python的标准库中, sys  模块是一个常用而强大的工具,它提供了与Python解释器交互的函数和变量。本文将介绍 sys 模块的一些常用函数和方法,并通过实际的代码实例来解析它们的用法

    2024年03月09日
    浏览(37)
  • Python教程:sys模块中maxsize()的方法

    在Python中,sys模块有一个名为maxsize()的方法。这个方法返回一个变量Py_ssize_t可以容纳的最大值。 Py_ssize_t是一个整数,它给出了变量可以取的最大值。大小因操作系统的位而异。 32位的大小为(2 power 31)-1,64位的大小为(2 power 63)-1。 返回:此方法根据平台类型返回最大大小值

    2024年02月10日
    浏览(29)
  • python sys.stdin(详细介绍readline()和readlines())

    在Python中, sys.stdin 是 sys 模块的一部分,用于处理标准输入流(stdin)。 详细介绍 sys.stdin.readline()和 sys.stdin.readlines() sys.stdin.readline() 方法从标准输入中读取一行用户输入。 sys.stdin.readline() sys.stdin.readlines() 方法会一次性读取所有输入行,并返回一个包含各行数据的列表。

    2024年02月07日
    浏览(31)
  • 【Python基础入门篇】基本函数——os与sys模块

    os模块和sys模块 os模块负责程序与操作系统交互,提供访问操作系统的接口 sys模块负责程序与Python解释器交互,用于操控Python运行环境 待完善

    2024年01月25日
    浏览(35)
  • Python模块和包:sys模块、os模块和变量函数的使用

    模块化指将一个完整的程序分解为一个一个小的模块,通过将模块组合,来搭建出一个完整的程序。模块化具有方便开发、维护和复用的优点。在Python中,每个py文件就是一个模块。 在一个模块中引入外部模块有两种方式: import 模块名 和 import 模块名 as 模块别名 。后者可以

    2024年02月08日
    浏览(28)
  • 2、有序链表的维护【问题描述】编写一个程序,根据从标准输入接收的指令来维护和操作排序的链表(C语言、java和Python分别实现)

    【问题描述】 编写一个程序,根据从标准输入接收的指令来维护和操作排序的链表。链表是按顺 序维护的,这意味着链表中的数据在每次操作后都以递增的数字顺序存储。 请注意,在创建新节点时,需要使用malloc为它们分配空间;一旦不再需要任何已 分配的空间,就应该使

    2024年02月09日
    浏览(34)
  • python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别

    Python的程序有两中退出方式:os._exit(), sys.exit()。 本文介绍这两种方式的区别和选择。 os._exit()会直接将python程序终止,之后的所有代码都不会继续执行。 sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出。如果有捕获此异常的代码,那

    2023年04月08日
    浏览(41)
  • 【开发语言】C语言与Python的互操作详解

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客内容主要围绕:        5G/6G协议

    2024年02月10日
    浏览(38)
  • 入门Python编程:了解计算机语言、Python介绍和开发环境搭建

    计算机语言是用来控制计算机行为的一种语言,通过它可以告诉计算机该做什么。计算机语言和人类语言在本质上没有太大区别,只是交流的对象不同。 计算机语言发展经历了三个阶段: 1. 机器语言 机器语言使用二进制编码来编写程序。 执行效率高,但编写起来麻烦。 2

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包