一、sys 模塊
sys是Python的一個「標准庫」,也就是官方出的「模塊」,是「System」的簡寫,封裝了一些系統的信息和接口。
官方的文檔參考:https://docs.python.org/2/library/sys.html
中文版文檔參考:http://xukaizijian.blog.163.com/blog/static/170433119201111625428624/
二、sys.argv介紹和基本使用
「argv」是「argument variable」參數變量的簡寫形式,一般在命令行調用的時候由系統傳遞給程序。這個變量其實是一個List列表,argv[0] 一般是“被調用的腳本文件名或全路徑”,這個與操作系統有關,argv[1]和以后就是傳入的系統命令參數。
其實是一個從程序外部獲取參數的入口,這個“外部”很關鍵,一般我們在命令行中運行。因為我們從外部輸入的參數可以是多個,也就是說sys.argv其實可以看作是一個列表,所以才能用[]提取其中的元素。其第一個元素是程序本身,隨后才依次是外部給予的參數。
下面總結一下:
sys.argv[0]表示代碼本身文件路徑,所以參數從1開始.
sys.argv[1]表示第一個命令行參數
sys.argv[1:]表示從第一個命令行參數到輸入的最后一個命令行參數
sys.argv[1][2:] 表示取第一個命令行參數,但是去掉前兩個字節
第一種情況:
1 #test.py
2
3 import sys
4 a = sys.argv[0]
5 print(a)
第二種情況:
1 #test1.py
2
3 import sys
4 a = sys.argv[1]
5 print(a)
第三種情況:
1 #test2.py
2
3 import sys
4 a = sys.argv[1:]
5 print(a)
三、結合os模塊使用
1 #test3.py
2
3 import sys,os
4 a = sys.argv[1]
5 os.system(a)
上面的例子中,os.system接收命令行參數,運行參數指令
四、sys模塊常用方法
sys.argv 命令行參數List,第一個元素是程序本身路徑 sys.exit(n) 退出程序,正常退出時exit(0) sys.version 獲取Python解釋程序的版本信息 sys.maxint 最大的Int值 sys.exit([arg]) 程序中間的退出,arg=0為正常退出 sys.getdefaultencoding() 獲取系統當前編碼,一般默認為ascii sys.setdefaultencoding() 設置系統默認編碼,執行dir(sys)時不會看到這個方法,在解釋器中執行不通過,可以先執行reload(sys),在執行 setdefaultencoding('utf8'),此時將系統默認編碼設置為utf8。(見設置系統默認編碼 ) sys.getfilesystemencoding() 獲取文件系統使用編碼方式,Windows下返回'mbcs',mac下返回'utf-8' sys.path 獲取指定模塊搜索路徑的字符串集合,可以將寫好的模塊放在得到的某個路徑下,就可以在程序中import時正確找到 sys.platform 獲取當前系統平台 sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 變量包含與標准I/O 流對應的流對象. 如果需要更好地控制輸出,而print 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時候你就可以重定向輸出和輸入到其它設備( device ), 或者以非標准的方式處理它
們
五、測試sys.stdou.flush()
import time def main(): for i in range(50): print("程序已經運行完成:%",i/50*100) time.sleep(0.1) if __name__ == '__main__': main()
windows系統下執行腳本會每0.1秒執行一次
Linux系統下執行腳本會一次性輸出,可以 加上 一行代碼 sys.stdout.flush(),就會達到 效果了
sys.stdout.flush()強制刷新緩沖區
緩沖區的刷新方式: 1.flush()刷新緩存區 2.緩沖區滿時,自動刷新 3.文件關閉或者是程序結束自動刷新
當我們需要打印一些字符時,並不是立刻就打印,而是先將需要打印的字符放入緩沖區,在緩沖區刷新時打印,當緩沖區未滿,或者程序運行未結束時,可使用sy
s.stdout.flush()強制刷新緩沖區,立刻進行打印
import time def main(): for i in range(50): print("程序已經運行完成:%",i/50*100) sys.stdout.flush() #清理緩存 time.sleep(0.1) if __name__ == '__main__': main()
總結: 在Linux系統下,必須加入sys.stdout.flush()才能一秒輸一個數字 在Windows系統下,加不加sys.stdout.flush()都能一秒輸出一個數字