15. Python 中常用的标准库系 sys 模块

AI 概述
本文讲解Python标准库sys的核心用法:sys.exit用于退出程序,0为正常退出;sys.argv获取命令行参数,可实现参数解析与简易计算器;sys.stdin、stdout、stderr对应标准输入输出与错误流,stdout.write可实现同行刷新进度;sys.path管理模块搜索路径,支持动态添加自定义;sys.version查看Python版本,sys.platform获取系统类型。文中附实用示例,帮助快速掌握sys基础操作。
目录
文章目录隐藏
  1. 1. sys.exit(code)
  2. 2. sys.argv
  3. 3. 标准输入、标准输出、标准出错
  4. 4. sys.path
  5. 5. sys.version
  6. 6. sys.platform

上节我们学习了 Python 中的 OS 标准库 ,这节课我们来学习下另外一个 标准库 sys。

1. sys.exit(code)

sys.exit(code)的功能是退出程序:

  • 参数 code,退出代码,通常 0 代表正常退出,其它值代码异常退出
  • 返回值,无

演示sys.exit(code)的例子如下:

import sys

print('hello')
sys.exit(0)
print('world')
  • 在第 3 行,打印 hello
  • 在第 4 行,退出程序
  • 在第 5 行,打印 world
    • 已经执行 sys.exit(0) 退出了程序,不会执行该行代码

运行程序:

C:\> python exit.py
hello
C:\>

可以看到,程序打印 hello 后即退出了。

2. sys.argv

2.1 命令行参数

在 windows 和 linux 中,操作系统提供了命令行的控制方式,用户输入命令完成任务。例如,建立一个目录,输入如下命令:

C:\> mkdir test

这条命令创建了一个名称为 test 的目录,字符串 ‘mkdir’ 和字符串 ‘test’ 被称为命令行参数。

2.2 Python 程序的命令行参数

Python 将命令行参数保存在 sys 模块中的 argv 变量中:

  • sys.argv 是一个数组
  • 数组中存储的是字符串

在命令行模式下,使用 python 解释器执行程序 program.py:

C:\> python program.py argument

则命令行参数 sys.argv 等于 [‘program.py’, ‘argument’],注意:

  • 输入的命令行由 3 个单词构成,但是命令行参数不包括 ‘python’
  • 命令行参数包括 python 程序文件名,即 ‘program.py’

 

2.3 例子:回显所有的参数

编写程序 echo.py,程序显示所有的参数:

import sys

for arg in sys.argv:
    print(arg)

程序遍历数组sys.argv,打印数组中的参数。在命令行中运行程序:

C:\> python echo.py a b c
echo.py
a
b
c

sys.argv 包括 4 个参数:’echo.py’、’a’、’b’、’c’。

2.4 例子:命令行计算器

编写程序 calc.py,对命令行输入的表达式进行计算,例如:

C:\> python calc.py 1 + 1
2
C:\> python calc.py 2 - 1
2
  • 在第 1 行,计算 1 + 1 的结果
  • 在第 3 行,计算 2 – 1 的结果

注意:数字和运算符之间必须要有空格

  • 正确的输入:python calc.py 1 + 1
  • 错误的输入:python calc.py 1+1

程序 calc.py 的代码如下:

import sys

if len(sys.argv) != 4:
    print('Usage: python calc.py operand [+|-] operand')
    sys.exit(0)

left = sys.argv[1]
operator = sys.argv[2]
right = sys.argv[3]

if operator == '+':
    print(int(left) + int(right))

if operator == '-':
    print(int(left) - int(right))
  • 在第 3 行,检查命令行参数个数,正常情况下是 4 个参数
    • 参数 0 是 ‘calc.py’
    • 参数 1 是左边的操作数
    • 参数 2 是操作符
    • 参数 3 是右边的操作数
  • 在第 7 行到第 9 行,获取左边的操作数、操作符、右边的操作数
  • 在第 11 行,求和
    • 注意,命令行参数是字符串,需要使用函数 int(string) 转换为整数
  • 在第 14 行,相减
    • 注意,命令行参数是字符串,需要使用函数 int(string) 转换为整数

3. 标准输入、标准输出、标准出错

3.1 概述

Python 程序将键盘抽象成一个可读的文件,从键盘读取用户输入,类似于从文件中读取数据;Python 程序将屏幕抽象成一个可写的文件,向屏幕输出数据,类似于向文件中写数据。

Python 程序执行时会自动打开三个文件:

  • 标准输入文件(stdin),通常对应终端的键盘
  • 标准输出文件(stdout),对应终端的屏幕
  • 标准错误输出文件(stderr),对应终端的屏幕

程序将从标准输入文件读取用户输入,将正常输出数据输出到标准输出文件,而将错误信息输出到标准错误文件。

3.2 sys.stdin

sys.stdin是 python 程序的标准输入,示例如下:

>>> import sys
>>> line = sys.stdin.readline()
abc
>>> line
'abc\n'
  • 在第 2 行,使用readline()方法读取用户输入的一行
  • 在第 3 行,用户输入 abc

3.3 sys.stdout

sys.stdout是 python 程序的标准输出,示例如下:

import sys

sys.stdout.write('www')
sys.stdout.write('mybj123')
sys.stdout.write('com')
  • 在第 3 行,使用write()方法向屏幕输出

运行程序,输出如下:

wwwmybj123com

从输出可以看出,sys.stdout.write(text)print(text)的区别:

  • print(text)输出 text 后会自动换行
  • sys.stdout.write(text) 输出 text 后不会自动换行

3.4 sys.stderr

sys.stderr是 python 程序的标准出错,与sys.stdout相比:

  • 两者都是将数据输出到屏幕
  • 将正常的信息输出到sys.stdout
  • 将错误的信息输出到sys.stderr

3.5 例子:打印下载进度

Python 中的内置函数print(text)会自动的加入换行,而在某些场景下,不希望输出换行,例如,打印下载进度,显示效果如下:

打印下载进度

程序在运行的过程中,断断续续的输出如下文本:

  • Downloading 1%
  • Downloading 2%
  • Downloading 100%

如果使用 print(text),就会输出 100 行,无法达到上图的效果。

使用sys.stdout.write(text)可以控制程序输出在同一行,代码如下:

import sys
import time

for rate in range(100):
    text = 'Downloading %d%%' % rate
    sys.stdout.write(text)
    sys.stdout.write('\r')
    time.sleep(1)    
  • 在第 2 行,引入 time 模块,需要使用 time 模块的 sleep 方法
  • 在第 4 行,使用 for 循环模拟下载的过程,总共输出 100 行文本
    • 在第 6 行,打印当前的下载进度
    • 在第 7 行,输出 ‘\r’,将光标移动到行首
      • sys.stdout.write('\r')仅仅输出一个字符 ‘\r’,不会再额外输出换行
    • 在第 8 行,使用 time.sleep 睡眠 1 秒

4. sys.path

4.1 概述

Python 的模块是一个普通的 Python 文件,例如 os 模块对应的文件是 os.py。os 模块是 Python 自带的模块,如果 Python 安装到 C:\Python3 目录下,在 C:\Python3\Lib 目录下能找到 os.py,即 os.py 的完整路径是 C:\Python3\Lib\os.py。

sys.path 是一个列表,列表保存了多个路径名

>>> import sys
>>> sys.path
['C:\\Python3\\DLLs', 'C:\\Python3\\lib', 'C:\\Python3\\lib\\plat-win', 'C:\\Python3\\lib\\lib-tk', 'C:\\Python3', 'C:\\Python3\\lib\\site-packages', 'C:\\Python3\\lib\\site-packages\\win32']

Python 使用 ‘import os’ 引入 os 模块,注意:Python 使用模块名而不是模块的完整路径引入模块。Python 查找模块 os 的过程如下:

  • sys.path[0]指向的目录C:\Python3\DLLs下查找文件 os.py
  • sys.path[1]指向的目录C:\Python3\lib下查找文件 os.py

4.2 例子:自定义模块查找路径

本节演示如何自定义模块的查找路径,例子的目录结构如下:

目录结构

  • 2 个源文件:main.py 和 utils.py
  • 1 个目录 my-modules, utils.py 位于 my-modules 目录下
  1. 创建目录 my-modules:
    mkdir my-modules
    
  2. 创建文件 my-modules\utils.py:
    def add(a, b):
        return a + b
    
    def sub(a, b):
        return a - b
    
  3. 创建文件 main.py:
    import sys
    sys.path.append('my-modules')
    
    import utils
    print(utils.add(1, 1))
    print(utils.sub(2, 1))
    
  • 在第 2 行,将 my-modules 目录加入到搜索路径中
  • 在第 4 行,通过模块名 utils 导入模块
    • 导入模块时,在 sys.path 指定的目录下查找 utils.py
    • sys.path 包括目录 my-modules,因此能找到 utils.py

运行程序,输出结果:

2
1

5. sys.version

sys.version记录了 Python 的版本

如果运行 Python 3:

>>> sys.version
'2.7.0 (v2.7.17, Nov 7 2019, 10:07:09)'

如果运行 Python 2:

>>> sys.version
'3.6.0 (v3.6.0, Dec 23 2016, 08:06:12)'

6. sys.platform

sys.version记录了操作系统的型号。
在 windows 中打印sys.platform

>>> sys.platform
'win32'

在 linux 中打印 sys.platform:

>>> sys.platform
'linux'

以上关于15. Python 中常用的标准库系 sys 模块的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 15. Python 中常用的标准库系 sys 模块

发表回复