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__
參考:
- 劉江的博客及教程
- The Python Standard Library
轉載內容,僅為個人學習使用,如有侵權,請聯系刪之。