python3 sys模块

sys模块和os模块是很常用的模块,我们应该熟悉它的用法。

sys模块

sys.argv

获取命令行参数,返回值是List,第一个元素是程序本身
例子:
创建文件test.py,内容如下:

import sys
print(sys.argv)

在命令行中运行,测试文件。

[alphababy@AlphaBaby] py3test$ python3 test.py  
['test.py']
[alphababy@AlphaBaby] py3test$ python3 test.py
['test.py']
[alphababy@AlphaBaby] py3test$ python3 test.py 33
['test.py', '33']

看这样一个有趣的小程序,程序的功能是计算第一个参数的值,并返回
修改test.py文件如下:

import sys
print(eval(sys.argv[1]))

然后在命令行中调用解释器执行test.py文件:

[alphababy@AlphaBaby] py3test$ python3 test.py 1+3
4

sys.exit(n)

程序退出,如果是正常退出是sys.exit(0),这里的参数可以自己填,但是对于程序是怎样退出的应该传参是几,应该自己定义好,这样别人在运行你的程序的时候才知道你是怎样退出的,是正餐退出还是意外退出。

例子

import sys
print('hello')
sys.exit(0)
print('python')

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

sys.version

获取Python解释程序的版本信息

sys.maxsize

获取最大的Int值

sys.path

返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
比如就是我们在python源文件中import引入模块的时候就会在sys.path的目录中查找相应的模块,如果在这里面的目录中没有找到你要倒入的模块则会报错。

返回值是一个list则我们如果想倒入一个自定义模块下面的的包或者是模块则可以使用listappend方法在PYTHONPATH环境变量中增加相应的路径。

sys.platform

返回操作系统的名称

sys.stdout, sys.stdin, sys.stderror

分别和输出输入,错误输出相关

sys.stdout.write(str)

sys.stdout.writeprint 都是输出相关的函数print内部也是调用的sys.stdoutsys.stdout默认输出是屏幕。

import sys
s = 'test stdout'

print('--')
sys.stdout.write(s)
print('--')

class A(object):
    pass

print(A)

sys.stdout.write(A)

print 什么类型都可以输出,但是sys.stdout.write只可以输出字符串类型,否则报错。print默认是最后换行,但是sys.stdout.write默认不换行。
下面看我在百度找到的别人大佬写的一段代码:

import sys
file = sys.stdout    # 存储原始的输出对象
sys.stdout = open('1.txt', 'w')  # 重定向所有的写入内容到 1.txt 文件,
print('Citizen_Wang')   # 写入到 1.txt 文件中,在上一行语句中改变了输出流到文件中
print('Always fall in love with neighbours')  # 继续写入到文件中
sys.stdout.close()    # 其实就是 open 文件之后的关闭
sys.stdout = file  # 将 print 命令的结果返回给控制台
print('输出信息返回在控制台')  # 该信息会在控制台也显示

下面讲一个有趣的实例(python实现命令行进度提示):

特别是在使用linux下载依赖或者软件的时候,都会提示一个百分数的进度,这种进度提示是怎么实现的呢?

我猜你肯定知道\n, \t, \d等转移字符,但是你应该不知道、\r这个转移字符,这个转移字符有什么用呢?看如下代码:

import time
import sys

for i in range(20):
    print("个测试数据" + str(i), end="")
    sys.stdout.flush()    # 刷新缓冲区
    time.sleep(1)

sys.stdout.flush()的作用请看这里:https://blog.csdn.net/qq_20603001/article/details/62887099
这是一个简单的不能再简单的代码了,但是注意这里一直没有输出换行,接着看下面的代码,感受其中\r的作用:

import time
import sys

for i in range(20):
    if i%5 == 0:
        print("\r", end="")
    print("个测试数据" + str(i), end="")
    sys.stdout.flush()
    time.sleep(1)

当我们输出\r的时候,在一行中并且在\r前的所有字符将被清理掉。修改下代码继续运行测试:

import time
import sys

for i in range(20):
    if i%5 == 0:
        print("\r", end="")
    print("个测试数据" + str(i)) # 去掉了, end="",末尾会打印出换行
    sys.stdout.flush()
    time.sleep(1)

当出现换行时,并不会清理掉在\r字符前的内容,所以\r只会清理掉只在一行中的内容。
补充, 这样更能理解

import time
import sys

for i in range(20):
    print("\r", end="")
    time.sleep(1)
    print("个测试数据" + str(i), end="")
    sys.stdout.flush()
    time.sleep(1)

我们清楚了\r的用法那就可以实现一个命令行进度提示了:

import sys
import time

print("downloading:")
def view_bar(num, total):
    rate = float(num) / float(total)
    rate_num = int(rate * 100)
    r = "\r"+("="*(2*rate_num//10)+">")+(" "*(20-2*rate_num//10))+'%d%%' % (rate_num, )
    sys.stdout.write(r)
    sys.stdout.flush() # 刷新缓冲区


if __name__ == '__main__':
    for i in range(0, 101):
        time.sleep(0.01)
        view_bar(i, 100)


print("\ndownload successful\n")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,713评论 0 10
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,724评论 0 8
  • 常用模块 认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文...
    go以恒阅读 1,932评论 0 6
  • 在快餐业厮杀最激烈的无非就是肯德基和麦当劳,K记爷爷和M记叔叔一直相亲相爱,又同时相恨相杀;因为总能发现有肯德基的...
    MASA慧赢销阅读 1,634评论 0 2
  • 嘴边的阴影涂太黑了…… 很童趣,照片给拍模糊了。 这是草稿纸上乱画的,为了突显红笔的红。 卷福,太迷了。大爱那句“...
    夜聊人阅读 253评论 2 1