Python常用標准庫之sys


Python常用標准庫之sys

 

sys模塊主要是針對與Python解釋器相關的變量和方法,不是主機操作系統。
導入方式:import sys

sys.argv #獲取命令行參數列表,第一個元素是程序本身 sys.exit(n) #退出Python程序,exit(0)表示正常退出。當參數非0時,會引發一個SystemExit異常,可以在程序中捕獲該異常 sys.version #獲取Python解釋程器的版本信息 sys.maxsize #最大的Int值,64位平台是2**63 - 1 sys.path #返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 sys.platform #返回操作系統平台名稱 sys.stdin #輸入相關 sys.stdout #輸出相關 sys.stderr #錯誤相關 sys.exc_info() #返回異常信息三元元組 sys.getdefaultencoding() #獲取系統當前編碼,默認為utf-8 sys.setdefaultencoding() #設置系統的默認編碼 sys.getfilesystemencoding() #獲取文件系統使用編碼方式,默認是utf-8 sys.modules #以字典的形式返回所有當前Python環境中已經導入的模塊 sys.builtin_module_names #返回一個列表,包含所有已經編譯到Python解釋器里的模塊的名字 sys.copyright #當前Python的版權信息 sys.flags #命令行標識狀態信息列表。只讀。 sys.getrefcount(object) #返回對象的引用數量 sys.getrecursionlimit() #返回Python最大遞歸深度,默認1000 sys.getsizeof(object[, default]) #返回對象的大小 sys.getswitchinterval() #返回線程切換時間間隔,默認0.005秒 sys.setswitchinterval(interval) #設置線程切換的時間間隔,單位秒 sys.getwindowsversion() #返回當前windwos系統的版本信息 sys.hash_info #返回Python默認的哈希方法的參數 sys.implementation #當前正在運行的Python解釋器的具體實現,比如CPython sys.thread_info #當前線程信息 

sys.argv

sys.argv是一個腳本執行參數列表,列表的第一個元素是腳本名稱,從第二個元素開始才是真正的參數。

# test.py import sys for index, arg in enumerate(sys.argv): print("第%d個參數是: %s" % (index, arg)) #輸出 第0個參數是: test.py 第1個參數是: 1 第2個參數是: 2 第3個參數是: 3 第4個參數是: 4 

sys.path

path是一個目錄列表,供Python從中查找模塊。在Python啟動時,sys.path根據內建規則和PYTHONPATH變量進行初始化。sys.path的第一個元素通常是個空字符串,表示當前目錄。

>>> sys.path ['', 'C:\\Python36\\Lib\\idlelib', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages'] 

sys.path本質上是一個列表,可以進行append、insert、pop、remove等各種列表相關的操作,但通常都進行append操作,添加自己想要的查找路徑。

sys.stdin、sys.stdout、sys.stderr

stdin用於所有的交互式輸入(包括input()函數)。
stdout用於print()的打印輸出或者input()函數的提示符。
stderr用於解釋器自己的提示信息和錯誤信息。

簡而言之,這三個屬性就是操作系統的標准輸入、輸出和錯誤流,它們返回的都是一個“文件類型”對象,支持read()、write()和flush()等操作,就像用open()方法打開的文件對象那樣!

>>> import sys >>> s = sys.stdin.read() # 使用ctrl+d結束輸入 i like python end >>> s 'i like python\nend\n\n\n\n' >>> sys.stdout.write(s) i like python end 21 

sys.stdout 與 print()

當我們用input('Please input something!')時,事實上是先輸出提示信息,然后捕獲輸入。 以下兩組等價:

s = input('Please input something!')


print('Please input something!',)  # 逗號表示不換行
s = sys.stdin.readline()[:-1]  # -1 可以拋棄輸入流中的'\n' 換行符,自己琢磨一下為什么。

sys.stdin 與 input()

當我們print(obj)的時候,事實上是調用了sys.stdout.write(obj+'\n'),將內容打印到控制台(默認是顯示器),然后追加一個換行符。以下兩行等價:

sys.stdout.write('hello'+'\n') 
print('hello')

從控制台重定向到文件

默認情況下sys.stdout指向控制台。如果把文件對象賦值給sys.stdout,那么print ()調用的就是文件對象的write()方法。

f_handler = open('out.log', 'w') 
sys.stdout = f_handler 
print('hello')
# 你無法在屏幕上看到“hello”
# 因為它被寫到out.log文件里了

如果你還想同時在控制台打印的話,最好先將原始的控制台對象引用保存下來,向文件中打印之后再恢復 sys.stdout.

__console__ = sys.stdout # 保存控制台 # redirection start # # 去干點別的,比如寫到文件里 ... # redirection end # 干完別的了,恢復原來的控制台 sys.stdout = __console__ 

參考:

轉載內容,僅為個人學習使用,如有侵權,請聯系刪之。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM