python库之sys库(小白五分钟从入门到精通)
python标准库中的sys库用于与Python解释器文件进行交互,例如获取Python的版本信息、传递信息到Python代码中等。
python标准库中的sys库用于与Python解释器文件进行交互,例如获取Python的版本信息、传递信息到Python代码中等。
获取 Python 信息
本小节主要介绍如何使用sys库获取Python的相关信息。
获取 Pvthon 的解释器版本信息
sys库中的version用于获取当前Python的解释器版本号,version_info用于获取解释器的版本信息,。
示例代码:
import sys
print(sys.version)#获取当前Python的解释器版本号
print(sys.version_info)#获取解释器的版本信息
代码执行结果:
3.7.9 (tags/v3,7,9:13c94747c7,Aug 17 2020,18:58:18)[MSC v.1900 64 bit (AMD64)]sys.version info(major=3,minor=7,micro=9,releaselevel='final',serial=0)
第3行输出内容为version_info返回的信息,表示当前版本的Python解释器的详细信息,并且是以形式返回的、第1个元素为主版本号,第2个元素为次版本号,第3个元素为最小版本号。
第1行输出内容为version返回的信息,表示当前Python的解释器版本号。
式送网出结聚为笔者计算机上的python 3.7.9解释器的相关信息。由于不同的用户可能安装了不同版,pvb#解释器,而不同版本的Python解释器之间存在差别,例如3.7以前的字典是无序的(即输出的元豪PH)37爱政后的字黄均为有序的(即元素按顺序输出),因此为了确保代码的稳定性,通常在执行代码能。
通知用户确保安装了正确的Python解释器。
示例代码:
import sys
if (sys.version_info[0]*10+sys.version_info[1])/10 < 3.7:
print('您的Python版本过低,请安装Python 3.7及以上版本')
sys.exit()
else:
print("您的Python版本正确,代码将继续运行")
print('hello world')
第2行代码使用注判断当前使用的Python版本是否为3.7及以上版本。如果低于3.7则执行第3~4行代码第3行代码输出提示信息,第4行代码使用exit()函数退出当前程序,exit()函数在9.5.2小节介绍第5、6行代码表示满足Python版本要求,输出提示信息,并继续运行之后的代码。
如此便实现了简单的验证用户的Python版本是否满足要求的代码。在此后的几章中介绍的第三方库有、定的Pvthon版本要求,如果Python版本过低会导致无法使用某些第三方库。因此当后面的章节中对Python版本有要求时,读者可以使用此段代码对Pvthon版本进行验证。
·获取 Pvthon 的其他信息
sys库中还提供了获取Python的其他信息的方法,具体如下。
maxsize属性:获取当前Python支持的对象中包含的最大数据长度。
platform属性:获取当前计算机的操作系统。
copyright属性:获取当前Python的版权信息
executable属性:获取当前Pvthon解释器在计算机中的目录地址。
exec-prefix属性:获取当前Python的安装目录地址。
示例代码:
import sys
print(sys.maxsize)#获取Python支持的对象中包含的最大数据长度。
print(sys.platform)#获取当前计算机的操作系统。
print(sys.copyright)#获取当前Python的版权信息
print(sys.executable)#获取当前Python解释器在计算机中的目录地址
代码执行结果:
9223372036854775807
win32
Copyright(c)2001-2020 Python Software Foundation.
All Rights Reserved.
Copyright(c)2000 Beopen.com
All Rights Reserved.
Copyright (c)1995-2001 Corporation for National Research Initiatives
All Rights Reserved.
Copyright(c)1991-1995 Stichting Mathematisch Centrum, hmsterdam
All Rights Reserved.
C:\userslAdministratorlAppDatalLocallPrograms evthonP
第1行输出中的9223372036854775807是maxsize的输出结果,表明python创建的最大数据长度为第9章 操作文件夹923372036854775807。第2行输出中的win32表示笔者当前计算机的操作系统。第3~10行物出为Python的版权信息。最后一行输出为Python解释器在计算机中的地址信息
退出程序
当代码程序在执行过程中处于某种状态后需要退出时(例如9.5.1小节中的第2个示例代码),可以使用exit()函数。其使用形式如下:
xit(status=None)
参数status:如果值被省略或为None,则默认为0,表示成功退出。如果值为其他整数,则作为系统退出状如果是其他信息,则会被当作报错信息输出。态。
示例代码:
import sys
if (sys.version_info[0]*10+sys.version_info[1])/10 < 3.8:
sys.exit('您的Python版本过低,请安装Python 3.8及以上版本')
else:
print("您的Python版本正确,代码将继续运行")
print('hello world')
第3行代码在exit()函数中添加了非0、非整数的内容,因此程序会将exit()中的参数当作报错信息输出,从而省略了9.5.1小节中第2个示例代码中的print()语句,使程序输出的结果与报错信息似。
执行代码后的输出结果如图9-12所示。
argv 获取输入命令
在讲解pip工具时,介绍了pip的多个参数,例如在命令提示符窗口中执行BIp IISt可以获取当前Python中已安装的所有第三方库的列表。而pip工具本质上是一个由代码编写而来的程序,那么在使用pip时,list这个参数是如何传递给程序的呢?程序又是如何处理list这个参数的呢?以上的问题涉及sys库中的argv函数,argv函数可用于获取用户输入的参数并以列表的形式返回,列表的索引号为0时默认返回当前代码文件所在的目录地址。
示例代码:
import sys
print(sys.argv)
代码执行结果:
'E:/书代码/第9章/第9章第5个程序.py']
向argv传递参数的方法与向pip传递参数的方法相同,需要在命令提示符窗口或终端中执行代码文件,即把Python代码文件当作一个程序吉接执行,而不是在IDLE中使用菜单栏中的“Run”来执行。在命令提示符窗口中执行代码文件的使用形式如下:
Python 代码路径
侧朝产金令提示符商日中执行图9-13所示的命令(如果读者的计算机使用mac0S系统,则在终端中机Pvthon3 代码路径形式的命令)。
在执行代码文件时添加参数的使用形式如下,
python 代码路径 参数
每个参数之间使用空格隔开、例如图9-14所示的命令在代码文件后面输入了参数-i hello。
如图9-13和图9-14所示,可以观察到执行代码后输出的结果都为一个列表,且列表中存在元素。输出的信息为代码中的print()语句输出的sys.argv的值。默认sys.argv中索引号为0的元素为当前执行代码的路径,后面的元素由参数传递。因此在图9-13所示的没有传递参数的情况下,返回的列表中只包含一个元素。而在医9-14所示的传递了参数,且参数之间使用了空格分隔的情况下,其返回的列表中包含3个元素。
sys.argv可以用于接收执行代码时所传递的参数,之后可以通过代码对参数进行处理。例如以下为实现运行代码文件时接收各个参数并处理的代码,当用户输入参数-h时,程序输出当前代码文件的使用说明书;当用户输入参数-a时,程序输出Pvthon的所有关键字;当用户输入参数-c时,程序输出Python安装的所有第三方库的列表。
示例代码(在运行代码文件的同时接收各个参数并处理):
import sys
import os
for i in range(1,len(sys.argv)):
if sys.argv[i] =='-h':
print('''本代码的帮助
-h:用于查询帮助
-a:用于获取Python的所有关键字
-c:用于获取Python安装的所有第三方库的列表''')
if sys.argv[i] =='-a':
print('开始查询Python的所有关键字:')
help("keywords")
if sys.argv[i] =='-c':
print('开始查询Python安装的所有第三方库: ')
os.system('pip list')
第3行代码使用for循环,循环次数由接收的参数个数决定,且由于sys.argv[0]的默认值为当前执行代码路因此为便于后面的代码能直接获取到用户输入的参数,循环从1开始。第4~7行代码用于验证接收的参数是否为-h,如果条件满足则执行print()语句。
第8~10行1号中,工按收的参数是否为-a,如果条尼则通过help("keywords)输出所有Python关键字。第11~13行代码用于验证接收的参数是否为-c,如果条生满足则通过os.system()图数执行bIP 1IE命令查询所有已经安装的第三方库。
执行代码后的输出结果如图9-15~图9-17所示
stdout、stdin 和 stderr
sys库中的stdout、stdin和stderr用于显示或获取数据流,其功能分别如下,sys.stdout:将信息显示到控制端,print()函数本质上是由sys.stdout封装而成的,sys.stdin:捕获用户输入的信息,input()函数本质上是由stdin封装而成的。sys.stderr:输出错误信息,显示效果与代码报错信息相同。
示例代码:
import sys
sys.stdout.write('hello')#将信息显示到控制端,
a = sys.stdin.readline()#捕获用户输入的信息,
print(a)
sys.stderr.write('错误,请修改!')
sys.exit()
第2行代码使用stdout中的write()方法将信息'he1lo'写入控制端,也可以使用writelines()方法(与7.2.3节open()函数中的write()和writelines()的功能相同)。”5:309474707,Aug 17 2020,18:58:18)[MSC V.1900informatior"credits" or "license()" for moreon win3=RESTART:E:/书代码/第9章/第9章第5个程序、py你起·你好错误,请修改!
第3行代码使用stdin中的readline()方法表示从控制端获取一行信息,也可以使用read()或readlines()表示从控制端获取多行信息。第4行代码将获取的信息输出。
第5行代码中的stderr.write()表示将报错信息写入控制端。
图 9-18
在该结果中,“hello”是由svs.stdout.write()实现的,但输出后并没有换行,这是因为sys.stdout与执行代码后的输出结果如图9-18所示。print()函数的区别在于print()函数在输出时增加了参数end='n,默认输出后会换行,这是在构造print()函数
当用户输入“你好”并按下回车键时,程序将此信息传递给sys.stdin.readline()的同时,还会将用户按时就已经添加好的附属功能。[nter键所触发的换行功能传递给变量a、因此使用print()函数输出变量a时会多出一个空白行。input0)函数无法捕获用户按Enter键所触发的换行符,这是因为在构造input()函数时,底层代码使用字符串对象中的strip(方法删除了字符串末尾的换行符。
错误,请修改!”显示为红色,与代码发生错误时的显示效果相同.。
更多推荐
所有评论(0)