【Python 标准库学习】系统相关的参数和函数库 — sys

欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/


sys 模块提供了与 Python 解释器紧密相关的一些变量和函数,这些变量可能被解释器使用,也可能由解释器提供

sys 模块官方文档:https://docs.python.org/3/library/sys.html


部分常用函数:

    • 1、sys.argv
    • 2、sys.path
    • 3、sys.platform
    • 4、sys.getwindowsversion()
    • 5、sys.version
    • 6、sys.exit(n)
    • 7、sys.modules
    • 8、sys.stdin / stdout / stderr


1、sys.argv

获取当前正在执行的命令行参数的参数列表

sys.argv[0] 返回当前程序名,sys.argv[1] 返回第一个参数

sys.argv[2] 返回第二个参数,len(sys.argv)-1 参数个数(减去文件名)

应用举例:在桌面新建一个 test.py,文件路径为:C:\Users\Lenovo\Desktop\test.py,写入以下内容:

import sys
print(sys.argv)
print('当前程序名:%s' %sys.argv[0])
print('第一个参数:%s' %sys.argv[1])
print('第二个参数:%s' %sys.argv[2])
print('参数个数:%s' %(len(sys.argv)-1))

用命令行运行该程序:

C:\Users\Lenovo\Desktop>test.py arg1 arg2
['C:\\Users\\Lenovo\\Desktop\\test.py', 'arg1', 'arg2']
当前程序名:C:\Users\Lenovo\Desktop\test.py
第一个参数:arg1
第二个参数:arg2
参数个数:2

2、sys.path

获取模块文件搜索路径的字符串,或临时指定新搜索路径,可通过在主程序设置临时搜索路径来解决指定文件夹下模块文件的导入问题

应用举例:

>>> import sys                     # 导入 sys 模块
>>> sys.path                       # 执行 path 函数
['', 'E:\\Python\\Lib\\idlelib', 'E:\\Python\\python36.zip', 'E:\\Python\\DLLs', 'E:\\Python\\lib', 'E:\\Python', 'C:\\Users\\Lenovo\\AppData\\Roaming\\Python\\Python36\\site-packages', 'E:\\Python\\lib\\site-packages', 'E:\\Python\\lib\\site-packages\\viz-0.0.5-py3.6.egg', 'E:\\Python\\lib\\site-packages\\win32', 'E:\\Python\\lib\\site-packages\\win32\\lib', 'E:\\Python\\lib\\site-packages\\Pythonwin']
>>> sys.path[0] = 'D:\\test'       # 临时指定新的搜索路径
>>> sys.path                       # 显示临时指定的搜索路径已经存在
['D:\\test', 'E:\\Python\\Lib\\idlelib', 'E:\\Python\\python36.zip', 'E:\\Python\\DLLs', 'E:\\Python\\lib', 'E:\\Python', 'C:\\Users\\Lenovo\\AppData\\Roaming\\Python\\Python36\\site-packages', 'E:\\Python\\lib\\site-packages', 'E:\\Python\\lib\\site-packages\\viz-0.0.5-py3.6.egg', 'E:\\Python\\lib\\site-packages\\win32', 'E:\\Python\\lib\\site-packages\\win32\\lib', 'E:\\Python\\lib\\site-packages\\Pythonwin']
>>> sys.path[0]                    # 获取第一个搜索路径
'D:\\test'                         # 显示第一个搜索路径字符串

3、sys.platform

操作系统标识符判断函数,获取当前执行环境的平台,不同系统的标识符如下:

系统标识符
Windowswin32
linuxlinux
MacOSdarwin
Windows/Cygwincygwin
AIXaix

应用举例:

>>> import sys
>>> print(sys.platform)
win32

可以利用 platform 结合 sys.path 函数实现不同版本模块文件的导入,如在 Windows 操作系统下导入 Windows 版本的模块文件和在 Linux 操作系统下导入 Linux 版本的模块文件,用代码演示如下:

if sys.platform.startswith('win32'):print('调用 Windows 版本的模块文件代码')
elif sys.platform.startswith('linux'):print('调用 Linux 版本的模块文件代码')

4、sys.getwindowsversion()

返回描述当前运行的 Windows 版本信息的元组

返回的参数有:

参数含义
major主要版本号
minor次要版本号
build发布年月
platform返回一个数值,代表操作系统产品类型号,不同数值代表含义不同
service_pack一个字符串
service_pack_minor\
service_pack_major\
suite_mask\
product_type返回一个数值,代表产品类型,不同数值代表含义不同
platform_version返回当前操作系统的 major (主要版本号)、minor (次要版本号) 和 build (发布年月),类型为一个三元组

platform 可能的值及其含义:

常量平台
0(VER_PLATFORM_WIN32s)Windows 3.1上的Win32s
1(VER_PLATFORM_WIN32_WINDOWS)Windows 95/98 / ME
2(VER_PLATFORM_WIN32_NT)Windows NT / 2000 / XP / x64
3(VER_PLATFORM_WIN32_CE)Windows CE

product_type 可能的值及其含义:

常量平台
1(VER_NT_WORKSTATION)代表系统是工作站
2(VER_NT_DOMAIN_CONTROLLER)代表系统是域控制器
3(VER_NT_SERVER)代表系统是服务器,但不是域控制器

组件也可以按名称访问,因此 sys.getwindowsversion()[0] 等同于sys.getwindowsversion().major,为了与以前的版本兼容,只有前5个元素可以通过索引检索。

应用举例:

>>> import sys
>>> print(sys.getwindowsversion())
sys.getwindowsversion(major=10, minor=0, build=18363, platform=2, service_pack='')
>>> 
>>> print(sys.getwindowsversion()[1])
0
>>> 
>>> print(sys.getwindowsversion().platform_version)
(10, 0, 18362)

5、sys.version

返回一个字符串,包含 Python 解释器的版本号以及所用的内部版本号和编译器的附加信息

应用举例:

>>> import sys
>>> print(sys.version)
3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]

6、sys.exit(n)

程序退出,如果是正常退出是 sys.exit(0),可选参数 n 可以是给定退出状态(默认为零)的整数,也可以是其他类型的对象。如果是整数,则 0 被认为是成功终止,任何非零值被 shell 等视为异常终止。大多数系统要求它在 0 到 127 之间,否则会产生未定义的结果。有些系统有一个为特定退出代码指定特定含义的约定,但这些约定通常不是普遍的;Unix 程序通常使用 2 表示命令行语法错误,使用 1 表示所有其他类型的错误。

应用举例:

import sysprint('I love python!')
sys.exit(0)
print('I love java!')

运行该程序,输出 I love python! 后并没有继续输出 I love java!,因为在执行到 sys.exit(0) 的时候程序就结束了。

7、sys.modules

sys.modules 可以将模块名称映射到已加载的模块的字典,每当程序员导入新的模块,sys.modules 将自动记录该模块,当第二次再导入该模块时,Python 会直接到字典中查找,从而加快了程序运行的速度。

sys.modules 模块拥有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块

应用举例:

>>> import sys
>>> print(sys.modules['os'])
<module 'os' from 'E:\\Python\\lib\\os.py'>
>>>
>>> print(sys.modules['sys'])
<module 'sys' (built-in)>
>>>
>>> print(sys.modules.values())
>>> dict_values([<module 'builtins' (built-in)>, <module 'sys' (built-in)>, ......, <module 'urllib.parse' from 'E:\\Python\\lib\\urllib\\parse.py'>])
>>>
>>> print(sys.modules.keys())
dict_keys(['builtins', 'sys', '_frozen_importlib', '_imp',......, 'pydoc', 'pkgutil', 'urllib', 'urllib.parse'])

8、sys.stdin / stdout / stderr

解释器用于标准输入 (sys.stdin)、输出 (sys.stdout) 和错误 (sys.stderr) 的文件对象。

sys.stdin、sys.stdout 与我们平常使用的 input、print 类似。

Python 在调用 print 时,事实上调用了 sys.stdout.write(obj+'\n'),用例子来说明(以下两行代码等价):

sys.stdout.write('I love python!' + '\n')
print('I love python!')

sys.stdin.readline() 方法会将标准输入全部获取,包括末尾的 \n,使用 len 计算长度时会把换行符 \n 也算进去,而 input() 获取输入时返回的结果是不包含末尾的换行符 \n 的,以下举例说明两者的区别:

>>> import sys
>>> print(len(sys.stdin.readline()))
hello
6
>>> print(len(input()))
hello
5

可以看到,两者输入的字符串都一样,而长度不一样,如果使用了 sys.stdin.readline() 方法,想将其换行符去掉的话,可以用 strip() 函数或者直接切片的方法,示例如下:

>>> import sys
>>> print(len(sys.stdin.readline()))
hello
6
>>> print(len(sys.stdin.readline().strip('\n')))
hello
5
>>> print(len(sys.stdin.readline()[:-1]))
hello
5

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

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

相关文章

【转】Microsoft Teams快速上手系列-01Teams的前世今生

说到Teams&#xff0c;这到底是一个什么产品&#xff1f;有人说它是团队协作工具&#xff0c;有人说它是云视频系统&#xff0c;有人说它是Hub&#xff0c;还有人说它是微软有史以来发展最快的一个产品&#xff0c;还有人说它完全是一个高效办公神器。其实都是对的。 Teams集成…

【Python 标准库学习】时间相关的函数库 — time

欢迎加入 Python 官方文档翻译团队&#xff1a;https://www.transifex.com/python-doc/ time 模块提供了各种时间相关的函数&#xff0c;该模块中的大多数函数是调用了所在平台 C 语言库的同名函数&#xff0c;这些函数的语义因平台而异&#xff0c;可能会在不同的平台有不同的…

【转】响应式详解

一两年以前&#xff0c;我发现&#xff0c;很多人都被响应式搞得很懵逼。 现在&#xff0c;我依然发现&#xff0c;还是有很多人&#xff0c;依旧被响应式搞得很懵逼。 所以&#xff0c;我也很懵逼。 到底是哪个环节出了问题&#xff0c;让这么多学习前端的同学对于这个响应…

【Python 标准库学习】容器数据类型库 — collections

欢迎加入 Python 官方文档翻译团队&#xff1a;https://www.transifex.com/python-doc/ collections 模块实现了特定目标的容器&#xff0c;以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。 collections 模块官方文档&#xff1a;https://docs.python.or…

【Python 标准库学习】安全哈希与摘要算法库 — hashlib

欢迎加入 Python 官方文档翻译团队&#xff1a;https://www.transifex.com/python-doc/ hashlib 模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。提供了常见的摘要算法&#xff0c;如MD5&#xff0c;SHA1等等。 摘要算法又称哈希算法、散列算法&#xff0c;摘要算…

【Python 必会技巧】[i for i in range(1,10)] — 列表解析式,列表中使用 for 循环

经常会看到类似于 [i for i in range(1,10)] 的表达式&#xff0c;这种表达式称为列表解析&#xff08;List Comprehensions&#xff09;&#xff0c;类似的还有字典解析、集合解析等等。 列表解析式是将一个列表&#xff08;实际上适用于任何可迭代对象&#xff09;转换成另一…

【转】Microsoft Teams 常见问题

作者&#xff1a;Zimu 链接&#xff1a;https://www.zhihu.com/question/52246335/answer/244877022 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 功能还是很全的&#xff0c;能和skype、onedrive、yammer、shar…

Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期之应用程序生命周期

参考&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms178473(vvs.100).aspx 参考&#xff1a;http://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候&#xff0c;IIS &#xff08;Int…

Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里&#xff0c;我们首先了解了Http请求在服务器端的处理流程&#xff0c;随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一…

【转】静态类与非静态类

静态类 继承&#xff08;多态&#xff09;、静态本身就是相反的。另外需要知道属性、事件其实是些特殊的方法。 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。 static 修饰符可用于类、字段、方法、属性、运算符、事件和构造函数&#xff0c;但不能用于索…

Python 数据分析三剑客之 NumPy(三):数组的迭代与位运算

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

Python 数据分析三剑客之 NumPy(四):字符串函数总结与对比

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Microsoft Teams快速上手系列-02Teams组成概述及使用分享

在上一篇博客中介绍了Teams的前世今生&#xff0c;大家对Teams已经有了一个初步的认识&#xff0c;但是如上一篇文章中所说Teams是一个集成度很高的云协作平台&#xff0c;具体应该怎么去有效的利用起来呢&#xff1f;接下来这篇博客给大家全方位的分享一下Teams的组成部分以及…

Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】ASP.NET内幕 - IIS处理模型

介绍 微软的Active ServerPages&#xff0c;即ASP&#xff0c;自1996年首次发布以来&#xff0c;为Web开发者构建Web应用提供了一个丰富、复杂的框架。过去的几年它的基础架构发展的如此迅速&#xff0c;成为目前大家了解的ASP.NET&#xff0c;已经不再象它的前身。ASP.NET是构…

沉淀一年零八个月,我也拿到了博客专家

回忆 第一篇文章的发布是在 2018.08.30&#xff0c;虽然注册 CSDN 已有三年多了&#xff0c;但一直都是白嫖大佬们的文章&#xff0c;没有自己写东西&#xff0c;回想起刚开始写博客&#xff0c;最开始并不是在 CSDN 的&#xff0c;在我大二上学期的时候&#xff0c;网上冲浪发…

JAVA-入门(内含jdk配置)

title: java入门 date: 2019-07-21 19:50:19 tags: java学习 top: 1 JAVASE学习 1.java入门 More info: Writing //超链接 2.java开发环境配置 第一步是配置本地开发环境&#xff0c;学习最基本的桌面开发&#xff0c;下面以win10为例配置Java开发环境&#xff0c;即&#…