python3 sys模塊

sys模塊和os模塊是很常用的模塊,我們應(yīng)該熟悉它的用法。

sys模塊

sys.argv

獲取命令行參數(shù),返回值是List,第一個(gè)元素是程序本身
例子:
創(chuàng)建文件test.py,內(nèi)容如下:

import sys
print(sys.argv)

在命令行中運(yùn)行,測試文件。

[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']

看這樣一個(gè)有趣的小程序,程序的功能是計(jì)算第一個(gè)參數(shù)的值,并返回
修改test.py文件如下:

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

然后在命令行中調(diào)用解釋器執(zhí)行test.py文件:

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

sys.exit(n)

程序退出,如果是正常退出是sys.exit(0),這里的參數(shù)可以自己填,但是對于程序是怎樣退出的應(yīng)該傳參是幾,應(yīng)該自己定義好,這樣別人在運(yùn)行你的程序的時(shí)候才知道你是怎樣退出的,是正餐退出還是意外退出。

例子

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

運(yùn)行程序后發(fā)現(xiàn)在,程序輸出hello后并沒有繼續(xù)輸出python。因?yàn)樵趫?zhí)行到sys.exit(0)的時(shí)候程序就結(jié)束了。

sys.version

獲取Python解釋程序的版本信息

sys.maxsize

獲取最大的Int值

sys.path

返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
比如就是我們在python源文件中import引入模塊的時(shí)候就會(huì)在sys.path的目錄中查找相應(yīng)的模塊,如果在這里面的目錄中沒有找到你要倒入的模塊則會(huì)報(bào)錯(cuò)。

返回值是一個(gè)list則我們?nèi)绻氲谷胍粋€(gè)自定義模塊下面的的包或者是模塊則可以使用listappend方法在PYTHONPATH環(huán)境變量中增加相應(yīng)的路徑。

sys.platform

返回操作系統(tǒng)的名稱

sys.stdout, sys.stdin, sys.stderror

分別和輸出輸入,錯(cuò)誤輸出相關(guān)

sys.stdout.write(str)

sys.stdout.writeprint 都是輸出相關(guān)的函數(shù)print內(nèi)部也是調(diào)用的sys.stdout,sys.stdout默認(rèn)輸出是屏幕。

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只可以輸出字符串類型,否則報(bào)錯(cuò)。print默認(rèn)是最后換行,但是sys.stdout.write默認(rèn)不換行。
下面看我在百度找到的別人大佬寫的一段代碼:

import sys
file = sys.stdout    # 存儲(chǔ)原始的輸出對象
sys.stdout = open('1.txt', 'w')  # 重定向所有的寫入內(nèi)容到 1.txt 文件,
print('Citizen_Wang')   # 寫入到 1.txt 文件中,在上一行語句中改變了輸出流到文件中
print('Always fall in love with neighbours')  # 繼續(xù)寫入到文件中
sys.stdout.close()    # 其實(shí)就是 open 文件之后的關(guān)閉
sys.stdout = file  # 將 print 命令的結(jié)果返回給控制臺(tái)
print('輸出信息返回在控制臺(tái)')  # 該信息會(huì)在控制臺(tái)也顯示

下面講一個(gè)有趣的實(shí)例(python實(shí)現(xiàn)命令行進(jìn)度提示):

特別是在使用linux下載依賴或者軟件的時(shí)候,都會(huì)提示一個(gè)百分?jǐn)?shù)的進(jìn)度,這種進(jìn)度提示是怎么實(shí)現(xiàn)的呢?

我猜你肯定知道\n, \t, \d等轉(zhuǎn)移字符,但是你應(yīng)該不知道、\r這個(gè)轉(zhuǎn)移字符,這個(gè)轉(zhuǎn)移字符有什么用呢?看如下代碼:

import time
import sys

for i in range(20):
    print("個(gè)測試數(shù)據(jù)" + str(i), end="")
    sys.stdout.flush()    # 刷新緩沖區(qū)
    time.sleep(1)

sys.stdout.flush()的作用請看這里:https://blog.csdn.net/qq_20603001/article/details/62887099
這是一個(gè)簡單的不能再簡單的代碼了,但是注意這里一直沒有輸出換行,接著看下面的代碼,感受其中\r的作用:

import time
import sys

for i in range(20):
    if i%5 == 0:
        print("\r", end="")
    print("個(gè)測試數(shù)據(jù)" + str(i), end="")
    sys.stdout.flush()
    time.sleep(1)

當(dāng)我們輸出\r的時(shí)候,在一行中并且在\r前的所有字符將被清理掉。修改下代碼繼續(xù)運(yùn)行測試:

import time
import sys

for i in range(20):
    if i%5 == 0:
        print("\r", end="")
    print("個(gè)測試數(shù)據(jù)" + str(i)) # 去掉了, end="",末尾會(huì)打印出換行
    sys.stdout.flush()
    time.sleep(1)

當(dāng)出現(xiàn)換行時(shí),并不會(huì)清理掉在\r字符前的內(nèi)容,所以\r只會(huì)清理掉只在一行中的內(nèi)容。
補(bǔ)充, 這樣更能理解

import time
import sys

for i in range(20):
    print("\r", end="")
    time.sleep(1)
    print("個(gè)測試數(shù)據(jù)" + str(i), end="")
    sys.stdout.flush()
    time.sleep(1)

我們清楚了\r的用法那就可以實(shí)現(xiàn)一個(gè)命令行進(jìn)度提示了:

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() # 刷新緩沖區(qū)


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


print("\ndownload successful\n")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,340評論 0 10
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,230評論 0 9
  • 常用模塊 認(rèn)識(shí)模塊 什么是模塊 什么是模塊? 常見的場景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文...
    go以恒閱讀 2,171評論 0 6
  • 在快餐業(yè)廝殺最激烈的無非就是肯德基和麥當(dāng)勞,K記爺爺和M記叔叔一直相親相愛,又同時(shí)相恨相殺;因?yàn)榭偰馨l(fā)現(xiàn)有肯德基的...
    MASA慧贏銷閱讀 1,854評論 0 2
  • 嘴邊的陰影涂太黑了…… 很童趣,照片給拍模糊了。 這是草稿紙上亂畫的,為了突顯紅筆的紅。 卷福,太迷了。大愛那句“...
    夜聊人閱讀 297評論 2 1

友情鏈接更多精彩內(nèi)容