python模塊中sys.argv[]使用



一、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()都能一秒輸出一個數字

  

 

 

 

 

 


免責聲明!

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



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