引入
1.什么是sys模块
-
sys模块是与python解释器交互的一个接口
-
该模块提供对解释器使用或维护的一些变量的访问和获取
-
它提供了许多函数和变量来处理 Python 运行时环境的不同部分
一、常见用法介绍
1、sys.argv
-
实现从程序的外部向程序传递参数
-
返回的是一个列表,第一个元素是程序文件名,后面的元素都是程序外部传入的参数
-
示例:
import sys print(sys.argv) uu=sys.argv if uu=="Jack": print(f"i am {uu}") else: for i in range(1,len(sys.argv)): print(f"i am {sys.argv}")
-
在终端运行是传入一个参数或多个参数
2.sys.path
-
获取指定模块搜索路径的字符串集合, 返回的是一个列表 (表示可以使用 append或者insert)
-
可以将写好的模块放入某个路径下, 然后将这个路径添加到 sys.path 里面, import时就可以找到
-
示例
import sys print(sys.path) ''' ['F:\\python_16\\day 29', 'F:\\PyCharm\\plugins\\python\\helpers\\pycharm_display', 'F:\\Python38\\python38.zip', 'F:\\Python38\\DLLs', 'F:\\Python38\\lib', 'F:\\Python38', 'F:\\python_16\\venv', 'F:\\python_16\\venv\\lib\\site-packages', 'F:\\PyCharm\\plugins\\python\\helpers\\pycharm_matplotlib_backend'] '''
-
可以发现是一个列表 (代表着可以使用 “append” 功能向里面添加路径)
-
第一个路径是当前执行文件所在的目录
-
第二个是整个项目的路径, “PyCharm” 的优化 (在别的编辑器上没有,可以忽略)
-
第四个是 “zip” 格式压缩包, 其实它是python解释器,里面放的是内置以及标准库模块
-
其他的一些都是第三方库或者自定义下载的模块
-
-
添加列表
import sys sys.path.append("[文件路径]") #示例 import sys sys.path.append("F:/python_16/day 29/") print(sys.path[-1])
3.sys.exit(n)
-
退出程序, 正常退出时 sys.exit(0), 其他为异常退出
-
一般情况下运行到主程序尾部, 解释器就正常退出了, 但如果想要中途退出, 就可以调用 sys.exit 函数
ps : exit()运用在交互式shell中,而sys.exit主要用于程序中,二者功能类似
4、sys.version
-
获取 Python 解释程序的版本信息
import sys
print(sys.version) #3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]
5.sys.platform
-
返回操作系统平台名称
import sys print(sys.platform) # win32
6.sys.maxint 与 sys.maxsize
-
最大的 int 值
-
Python3 中删除了 sys.maxint常量, 因为不再对整数值进行限制
import sys # print(sys.maxint) # AttributeError: module 'sys' has no attribute 'maxint' print(sys.maxsize) # 9223372036854775807
7.sys.getdefaultencoding( )
-
获取解释器默认编码
import sys
print(sys.getdefaultencoding()) # utf-8
8.sys.getfilesystemencoding( )
-
获取内存数据存到文件里的默认编码
import sys
print(sys.getfilesystemencoding()) # utf-8
9.sys.getrecursionlimit( )
-
获取最大递归层数
import sys
print(sys.encursionlimit()) # 1000
10.sys.setrecursionlimit( )
-
设置最大递归层数
import sys
sys.setrecursionlimit(1314)
print(sys.getrecursionlimit()) # 1314
11.sys.stdin.readline( )
-
标准输入
import sys
res = sys.stdin.readline()
print(res)
songha # 这是控制台输入的字符串
songha # 这是 print 输出的字符串 "songha\n"
12.sys.stdout.write(“xxx”)
-
标准输出 (相比较 print 能更好的控制输出)
import sys
sys.stdout.write("taoxiaoxin\n") #taoxiaoxind
-
模拟简单进度条动态加载
import sys,time for i in range(30): sys.stdout.write("█") time.sleep(0.1) sys.stdout.flush() # 刷新显示到屏幕上 '''输出内容 ██████████████████████████████ '''
二、模拟进度条
#储备知识
'%-50s' # "%":字符串格式化; "-":左对齐,数字和字符串默认都是右对齐; "50":代表我设置的宽度
'r' # 表示让光标跳到行首
# "print"模拟输出进度条效果,宽度是"40",传入的是"█"
print("▌%-40s▌" %'█')
print("▌%-40s▌" %'██')
print("▌%-40s▌" %'███')
print("▌%-40s▌" %'████')
print("▌%-40s▌" %'█████')
'''输出内容
▌█ ▌
▌██ ▌
▌███ ▌
▌████ ▌
▌█████ ▌
'''
#打印百分比"%",第一个是传值,第三个是取消第二个百分号的特殊意义
print('%s%%' %(10))
print('%s%%' %(30))
print('%s%%' %(80))
print('%s%%' %(100))
'''输出内容
10%
30%
80%
100%
'''
#使用参数来实现可变宽度
print("▌%%-%ds▌" % 40) # "▌%-40s▌"
print(("▌%%-%ds▌" % 40) % "██")
print(("▌%%-%ds▌" % 40) % "███")
print(("▌%%-%ds▌" % 40) % "████")
print(("▌%%-%ds▌" % 40) % "█████")
#开始实现:
import time
def progress(percent, symbol='█', width=40):
if percent > 1: # 超过 100% 的时候让其停在 1
percent = 1 # 可以避免进度条溢出
show_progress = ("▌%%-%ds▌" % width) % (int(percent * width) * symbol)
print("\r%s %.2f%%" % (show_progress, percent * 100), end='')
def plan():
data_size = 1025 # 传输数据
recv_size = 0 # 初始值为0
while recv_size < data_size:
time.sleep(0.1) # 模拟数据的传输延迟
recv_size += 150 # 每次收150
percent = recv_size / data_size # 接收的比例
progress(percent, width=40) # 进度条的宽度40
plan()
'''输出内容
▌████████████████████████████████████████▌ 100.00%
'''