一.sys模塊簡(jiǎn)介
該模塊提供了一些變量和函數(shù)振诬。這些變量可能被解釋器使用愤兵,也可能由解釋器提供。這些函數(shù)會(huì)影響解釋器。本模塊總是可用的。
sys常用的函數(shù)簡(jiǎn)介:
函數(shù)名 | 介紹 |
---|---|
sys.argv | 實(shí)現(xiàn)從程序外部向程序傳遞參數(shù)。 |
sys.exit([arg]) | 程序中間的退出廉涕,arg=0為正常退出 |
sys.stdout.write('please:') | 標(biāo)準(zhǔn)輸出,引出進(jìn)度條的例子 |
sys.getrecursionlimit() | 獲取最大遞歸層數(shù) |
sys.setrecursionlimit(1200) | 設(shè)置最大遞歸層數(shù) |
sys.getdefaultencoding() | 獲取系統(tǒng)當(dāng)前編碼,一般默認(rèn)為ascii狐蜕。 |
sys.setdefaultencoding() | 設(shè)置系統(tǒng)默認(rèn)編碼宠纯,執(zhí)行dir(sys)時(shí)不會(huì)看到這個(gè)方法,在解釋器中執(zhí)行不通過层释,可以先執(zhí)行reload(sys)婆瓜,在執(zhí)行 setdefaultencoding('utf8'),此時(shí)將系統(tǒng)默認(rèn)編碼設(shè)置為utf8湃累。(見設(shè)置系統(tǒng)默認(rèn)編碼 ) |
sys.getfilesystemencoding() | 獲取文件系統(tǒng)使用編碼方式勃救,Windows下返回'mbcs'碍讨,mac下返回'utf-8'. |
sys.path | 獲取指定模塊搜索路徑的字符串集合治力,可以將寫好的模塊放在得到的某個(gè)路徑下,就可以在程序中import時(shí)正確找到勃黍。 |
sys.platform | 獲取當(dāng)前系統(tǒng)平臺(tái) |
sys.stdin,sys.stdout,sys.stderr: stdin , stdout以及stderr | 變量包含與標(biāo)準(zhǔn)I/O 流對(duì)應(yīng)的流對(duì)象. 如果需要更好地控制輸出,而print 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時(shí)候你就可以重定向輸出和輸入到其它設(shè)備( device ), 或者以非標(biāo)準(zhǔn)的方式處理它們 |
二.sys常用函數(shù)案例
2.1 sys.argv
一個(gè)列表宵统,其中包含了被傳遞給 Python 腳本的命令行參數(shù)。 argv[0] 為腳本的名稱(是否是完整的路徑名取決于操作系統(tǒng))覆获。如果是通過 Python 解釋器的命令行參數(shù) -c 來執(zhí)行的马澈, argv[0] 會(huì)被設(shè)置成字符串 '-c' 。如果沒有腳本名被傳遞給 Python 解釋器弄息, argv[0] 為空字符串痊班。
sys.argv[0]當(dāng)前程序名
sys.argv[1]第一個(gè)參數(shù)
sys.argv[2]第二個(gè)參數(shù)
len(sys.argv)-1 參數(shù)個(gè)數(shù)(減去文件名)
代碼:
import sys
print(sys.argv[0])
測(cè)試記錄:
E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/sys_test1.py
E:/python/learn_python1/sys_test1.py
Process finished with exit code 0
2.2 sys.exit
由于 exit() 最終“只是”拋出一個(gè)異常,因此當(dāng)從主線程調(diào)用時(shí)摹量,只會(huì)從進(jìn)程退出涤伐;而異常不會(huì)因此被打斷。
調(diào)用sys.exit(n)可以中途退出程序缨称,當(dāng)參數(shù)非0時(shí)凝果,會(huì)引發(fā)一個(gè)SystemExit異常,從而可以在主程序中捕獲該異常睦尽。
代碼:
import sys
sys.exit(3)
print('hello')
測(cè)試記錄:
E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/sys_test1.py
Process finished with exit code 3
從上面的測(cè)試可以看出器净,sys.exit(3),因?yàn)?非0当凡,所以此時(shí)已經(jīng)退出整個(gè)程序了山害,后面的print('hello')語句不執(zhí)行。
2.3 sys.path
功能:獲取指定模塊搜索路徑的字符串集合沿量,可以將寫好的模塊放在得到的某個(gè)路徑下粗恢,就可以在程序中import時(shí)正確找到。
測(cè)試記錄:
>>> import sys
>>> sys.path
['', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\pip-21.0.1-py3.6.egg', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\Pythonwin']
>>>
sys.path.append("自定義模塊路徑")
2.4 sys.modules
功能:sys.modules是一個(gè)全局字典欧瘪,該字典是python啟動(dòng)后就加載在內(nèi)存中眷射。每當(dāng)程序員導(dǎo)入新的模塊,sys.modules將自動(dòng)記錄該模塊。當(dāng)?shù)诙卧賹?dǎo)入該模塊時(shí)妖碉,python會(huì)直接到字典中查找涌庭,從而加快了程序運(yùn)行的速度。它擁有字典所擁有的一切方法欧宜。
代碼:
import sys
print(sys.modules.keys())
測(cè)試記錄:
E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/sys_test1.py
dict_keys(['builtins', 'sys', '_frozen_importlib', '_imp', '_warnings', '_thread', '_weakref', '_frozen_importlib_external', '_io', 'marshal', 'nt', 'winreg', 'zipimport', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_weakrefset', 'site', 'os', 'errno', 'stat', '_stat', 'ntpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'encodings.gbk', '_codecs_cn', '_multibytecodec', 'types', 'functools', '_functools', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'weakref', 'collections.abc', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'zope', 'sysconfig', 'encodings.cp437', 'sitecustomize'])
Process finished with exit code 0
2.5 sys.stdin\stdout\stderr
功能:stdin , stdout , 以及stderr 變量包含與標(biāo)準(zhǔn)I/O 流對(duì)應(yīng)的流對(duì)象. 如果需要更好地控制輸出,而pri nt 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時(shí)候你就可以重定向輸出和輸入到其它設(shè)備( device ), 或者以非標(biāo)準(zhǔn)的方式處理它們
sys.stdout.write 可以做輸出重定向
代碼:
import sys
for i in range(3):
print("I love python!")
print("\n")
for i in range(3):
sys.stdout.write("I'm studying python!")
print("\n")
# 輸出的是紅色
for i in range(3):
sys.stderr.write("I'm studying python!")
測(cè)試記錄:
E:\python\learn_python1\venv\Scripts\python.exe E:/python/learn_python1/sys_test1.py
I love python!
I love python!
I love python!
I'm studying python!I'm studying python!I'm studying python!
I'm studying python!I'm studying python!I'm studying python!
Process finished with exit code 0
參考:
1.https://www.cnblogs.com/fmgao-technology/p/9074282.html
2.https://docs.python.org/zh-cn/3.6/library/sys.html
3.https://www.cnblogs.com/machangwei-8/p/10718187.html