1. 程式人生 > >python學習之——import sys模組

python學習之——import sys模組

首先,我們利用import語句 輸入 sys模組。基本上,這句語句告訴Python,我們想要使用這個模組。sys模組包含了與Python直譯器和它的環境有關的函式。

當Python執行import sys語句的時候,它在sys.path變數中所列目錄中尋找sys.py模組。如果找到了這個檔案,這個模組的主塊中的語句將被執行,然後這個模組將能夠被你 使用 。注意,初始化過程僅在我們 第一次 輸入模組的時候進行。另外,“sys”是“system”的縮寫。

Sys模組函式之多,我只能選取自己認為比較實用的一些函式列在此處。借馬雲找員工的說法,”找最合適的而不是最天才的”,這句話,我個人覺得在很多方面都能適應,學習也不在話下。Sys模組功能的確很多,但我們應該將重點放在那些功能才是最適合我們的,為此,我列的這些函式,就是我認為比較適合我以後開發的函式。

(1)sys.argv

很多人會想,我如何給我的程式在外部傳遞引數呢?這個,就可以實現。如: Tesy.py Import sys Print sys.argv[number] 一般情況下,number為0是這個指令碼的名字,1,2…則為命令列下傳遞的引數.如: Test.py指令碼內容: import sys print sys.argv[0] print sys.argv[1] print sys.argv[2] print sys.argv[3] 那麼 [[email protected] scripts]# python test.py arg1 arg2 arg3 test.py arg1 arg2 arg3 看到,對應的關係了嗎? sys模組中的argv變數通過使用點號指明——sys.argv——這種方法的一個優勢是這個名稱不會與任何在你的程式中使用的argv變數衝突。另外,它也清晰地表明瞭這個名稱是sys模組的一部分。


sys.argv變數是一個字串的 列表 (列表會在後面的章節詳細解釋)。特別地,sys.argv包含了 命令列引數 的列表,即使用命令列傳遞給你的程式的引數。

這裡,當我們執行python using_sys.py we are arguments的時候,我們使用python命令執行using_sys.py模組,後面跟著的內容被作為引數傳遞給程式。Python為我們把它儲存在sys.argv變數中。

記住,指令碼的名稱總是sys.argv列表的第一個引數。所以,在這裡,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,Python從0開始計數,而非從1開始。

(2)sys.platform

大家都知道,當今的程式比較流行的是跨平臺。簡單的說就是這段程式既可以在windows下,換到linux下也可以不加修改的執行起來,聽起來就不錯。所以,這個函式就可以派上用場了。 假設,我們想實現一個清除終端,linux下用clear, windows下用cls Ostype=sys.platform() If ostype==”linux” or ostype==”linux2”: Cmd=”clear” Else: Cmd=”cls”

(3) sys.exit(n)

執行至主程式的末尾時,直譯器會自動退出. 但是如果需要中途退出程式, 你可以呼叫sys.exit 函式, 它帶有一個可選的整數引數返回給呼叫它的程式. 這意味著你可以在主程式中捕獲對sys.exit 的呼叫。(注:0是正常退出,其他為不正常,可拋異常事件供捕獲!) sys.exitpython程式中退出,將會產生一個systemExit異常,可以為此做些清除除理的工作。這個可選引數預設正常退出狀態是0,以數值為引數的範圍為:0-127。其他的數值為非正常退出,還有另一種型別,在這裡展現的是strings物件型別。

(4)sys.path

大家對模組都有一定了解吧?大家在使用模組的某一個功能前,是不是需要匯入呢?答案是需要。那import,__import__命令就不用提幹嘛的了吧。那大家在執行import module_name的時候,python內部發生了什麼呢?簡單的說,就是搜尋module_name。根據sys.path的路徑來搜尋module.name >>> sys.path ['', '/usr/local/lib/python24.zip', '/usr/local/lib/python2.4', '/usr/local/lib/python2.4/plat-freebsd4', '/usr/local/lib/python2.4/lib-tk', '/usr/local/lib/python2.4/lib-dynload', '/usr/local/lib/python2.4/site-packages'] 大家以後寫好的模組就可以放到上面的某一個目錄下,便可以正確搜尋到了。當然大家也可以新增自己的模組路徑。Sys.path.append(“mine module path”).

sys.path包含輸入模組的目錄名列表。我們可以觀察到sys.path的第一個字串是空的——這個空的字串表示當前目錄也是sys.path的一部分,這與PYTHONPATH環境變數是相同的。這意味著你可以直接輸入位於當前目錄的模組。否則,你得把你的模組放在sys.path所列的目錄之一。首先,我們利用import語句 輸入 sys模組。基本上,這句語句告訴Python,我們想要使用這個模組。sys模組包含了與Python直譯器和它的環境有關的函式。

(5)sys.modules

This is a dictionary that maps module names to modules which have already been loaded. This can be manipulated to force reloading of modules and other tricks. Python.org手冊裡已經說的很明白了。 For names in sys.modules.keys(): If names != ’sys’: …… (6)sys.stdin,sys.stdout,sys.stderr stdin , stdout , 以及stderr 變數包含與標準I/O 流對應的流物件. 如果需要更好地控制輸出,而print 不能滿足你的要求, 它們就是你所需要的. 你也可以替換它們, 這時候你就可以重定向輸出和輸入到其它裝置( device ), 或者以非標準的方式處理它們

當Python執行import sys語句的時候,它在sys.path變數中所列目錄中尋找sys.py模組。如果找到了這個檔案,這個模組的主塊中的語句將被執行,然後這個模組將能夠被你 使用 。注意,初始化過程僅在我們 第一次 輸入模組的時候進行。另外,“sys”是“system”的縮寫。



sys模組中的argv變數通過使用點號指明——sys.argv——這種方法的一個優勢是這個名稱不會與任何在你的程式中使用的argv變數衝突。另外,它也清晰地表明瞭這個名稱是sys模組的一部分。


sys.argv變數是一個字串的 列表 (列表會在後面的章節詳細解釋)。特別地,sys.argv包含了 命令列引數 的列表,即使用命令列傳遞給你的程式的引數。


如果你使用IDE編寫執行這些程式,請在選單裡尋找一個指定程式的命令列引數的方法。


這裡,當我們執行python using_sys.py we are arguments的時候,我們使用python命令執行using_sys.py模組,後面跟著的內容被作為引數傳遞給程式。Python為我們把它儲存在sys.argv變數中。


記住,指令碼的名稱總是sys.argv列表的第一個引數。所以,在這裡,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]以及'arguments'是sys.argv[3]。注意,Python從0開始計數,而非從1開始。


sys.path包含輸入模組的目錄名列表。我們可以觀察到sys.path的第一個字串是空的——這個空的字串表示當前目錄也是sys.path的一部分,這與PYTHONPATH環境變數是相同的。這意味著你可以直接輸入位於當前目錄的模組。否則,你得把你的模組放在sys.path所列的目錄之一。