首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python基础教程 sys

10.3 标准库:一些深受欢迎的模块

在Python中,短语“开箱即用”(batteries included)最初是由Frank Stajano提出的,指的是Python丰富的标准库。安装Python后,你就免费获得了大量很有用的模块。鉴于有很多方式可以获取有关这些模块的详细信息(本章前面介绍过),这里不打算提供完整的参考手册(如果这样做将占据很大的篇幅),而只是描述几个我喜欢的标准模块,以激发你的探索兴趣。在本书后面介绍项目的章节(第20章~第29章)中,你将遇到其他的标准模块。这里对模块的描述并非面面俱到,只是将重点放在模块的一些有趣功能上。

10.3.1 sys

模块sys让你能够访问与Python解释器紧密相关的变量和函数,表10-2列出了其中的一些。

表10-2 模块sys中一些重要的函数和变量

函数/变量 描 述

argv 命令行参数,包括脚本名

exit([arg]) 退出当前程序,可通过可选参数指定返回值或错误消息

modules 一个字典,将模块名映射到加载的模块

path 一个列表,包含要在其中查找模块的目录的名称

platform 一个平台标识符,如sunos5或win32

stdin 标准输入流——一个类似于文件的对象

stdout 标准输出流——一个类似于文件的对象

stderr 标准错误流——一个类似于文件的对象

变量sys.argv包含传递给Python解释器的参数,其中包括脚本名。

函数sys.exit退出当前程序。(在第8章讨论的try/finally块中调用它时,finally子句依然会执行。)你可向它提供一个整数,指出程序是否成功,这是一种UNIX约定。在大多数情况下,使用该参数的默认值(0,表示成功)即可。也可向它提供一个字符串,这个字符串将成为错误消息,对用户找出程序终止的原因很有帮助。在这种情况下,程序退出时将显示指定的错误消息以及一个表示失败的编码。

映射sys.modules将模块名映射到模块(仅限于当前已导入的模块)。

变量sys.path在本章前面讨论过,它是一个字符串列表,其中的每个字符串都是一个目录名,执行import语句时将在这些目录中查找模块。

变量sys.platform(一个字符串)是运行解释器的“平台”名称。这可能是表示操作系统的名称(如sunos5或win32),也可能是表示其他平台类型(如Java虚拟机)的名称(如java1.4.0)——如果你运行的是Jython。

变量sys.stdin、 sys.stdout和sys.stderr是类似于文件的流对象,表示标准的UNIX概念:标准输入、标准输出和标准错误。简单地说, Python从sys.stdin获取输入(例如,用于input中),并将输出打印到sys.stdout。有关文件和这三个流的详细信息,请参阅第11章。

举个例子,来看看按相反顺序打印参数的问题。从命令行调用Python脚本时,你可能指定一些参数,也就是所谓的命令行参数。这些参数将放在列表sys.argv中,其中sys.argv[0]为Python脚本名。按相反的顺序打印这些参数非常容易,如代码清单10-5所示。

代码清单10-5 反转并打印命令行参数

# reverseargs.py

import sys

args = sys.argv[1:]

args.reverse()

print(' '.join(args))

如你所见,我创建了一个sys.argv的副本。也可修改sys.argv,但一般而言,不这样做更安全,因为程序的其他部分可能依赖于包含原始参数的sys.argv。另外,注意到我跳过了sys.argv的第一个元素,即脚本的名称。我使用args.reverse()反转这个列表,但不能打印这个操作的返回值,因为它就地修改列表并返回None。下面是另一种解决方案:

print(' '.join(reversed(sys.argv[1:])))

最后,为美化输出,我使用了字符串的方法join。下面来尝试运行这个程序(假设使用的是bash shell)。

$ python reverseargs.py this is a test

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190115G05TLK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券