1:print"thereare",len(sys.argv)-1,"arguments:"#使用len(" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python標準庫之Sys模塊使用詳解

系統(tǒng) 1617 0

sys 模塊提供了許多函數(shù)和變量來處理 Python 運行時環(huán)境的不同部分.

處理命令行參數(shù)

在解釋器啟動后, argv 列表包含了傳遞給腳本的所有參數(shù), 列表的第一個元素為腳本自身的名稱.

使用sys模塊獲得腳本的參數(shù)

復制代碼 代碼如下:

print "script name is", sys.argv[0]??????? # 使用sys.argv[0]采集腳本名稱

if len(sys.argv) > 1:
??? print "there are", len(sys.argv)-1, "arguments:"? # 使用len(sys.argv)-1采集參數(shù)個數(shù)-1為減去[0]腳本名稱
??? for arg in sys.argv[1:]:??????????? #輸出除了[0]外所有參數(shù)
??????? print arg
else:
??? print "there are no arguments!"


如果是從標準輸入讀入腳本 (比如 "python < sys-argv-example-1.py"), 腳本的名稱將被設置為空串.

如果把腳本作為字符串傳遞給python (使用 -c 選項), 腳本名會被設置為 "-c".

處理模塊

path 列表是一個由目錄名構(gòu)成的列表, Python 從中查找擴展模塊( Python 源模塊, 編譯模塊,或者二進制擴展).

啟動 Python 時,這個列表從根據(jù)內(nèi)建規(guī)則, PYTHONPATH 環(huán)境變量的內(nèi)容, 以及注冊表( Windows 系統(tǒng))等進行初始化.

由于它只是一個普通的列表, 你可以在程序中對它進行操作,

使用sys模塊操作模塊搜索路徑

復制代碼 代碼如下:

print "path has", len(sys.path), "members"

sys.path.insert(0, "samples")? #將路徑插入到path,[0]中
import sample

sys.path = []? #刪除path中所有路徑
import random

使用sys模塊查找內(nèi)建模塊

builtin_module_names 列表包含 Python 解釋器中所有內(nèi)建模塊的名稱

復制代碼 代碼如下:

def dump(module):
??? print module, "=>",
??? if module in sys.builtin_module_names:? #查找內(nèi)建模塊是否存在
??????? print " "
??? else:
??????? module = _ _import_ _(module)???????? #非內(nèi)建模塊輸出模塊路徑
??????? print module._ _file_ _

dump("os")
dump("sys")
dump("string")
dump("strop")
dump("zlib")

os => C:\python\lib\os.pyc
sys =>
string => C:\python\lib\string.pyc
strop =>
zlib => C:\python\zlib.pyd

使用sys模塊查找已導入的模塊

modules 字典包含所有加載的模塊. import 語句在從磁盤導入內(nèi)容之前會先檢查這個字典.

Python 在處理你的腳本之前就已經(jīng)導入了很多模塊.

復制代碼 代碼如下:

print sys.modules.keys()


['os.path', 'os', 'exceptions', '_ _main_ _', 'ntpath', 'strop', 'nt',
'sys', '_ _builtin_ _', 'site', 'signal', 'UserDict', 'string', 'stat']

使用sys模塊獲得當前平臺

sys.platform? 返回當前平臺 出現(xiàn)如: "win32" "linux2" 等

處理標準輸出/輸入

標準輸入和標準錯誤 (通常縮寫為 stdout 和 stderr) 是內(nèi)建在每一個 UNIX 系統(tǒng)中的管道。

當你 print 某些東西時,結(jié)果前往 stdout 管道;

當你的程序崩潰并打印出調(diào)試信息 (例如 Python 中的 traceback (錯誤跟蹤)) 的時候,信息前往 stderr 管道

復制代碼 代碼如下:

>>> for i in range(3):
...???? print'Dive in'

Dive in
Dive in
Dive in
>>> import sys
>>> for i in range(3):
...???? sys.stdout.write('Dive in')

Dive inDive inDive in
>>> for i in range(3):
...???? sys.stderr.write('Dive in')

Dive inDive inDive in

stdout 是一個類文件對象;調(diào)用它的 write 函數(shù)可以打印出你給定的任何字符串。

實際上,這就是 print 函數(shù)真正做的事情;它在你打印的字符串后面加上一個硬回車,然后調(diào)用 sys.stdout.write 函數(shù)。

在最簡單的例子中,stdout 和 stderr 把它們的輸出發(fā)送到相同的地方

和 stdout 一樣,stderr 并不為你添加硬回車;如果需要,要自己加上。

stdout 和 stderr 都是類文件對象,但是它們都是只寫的。

它們都沒有 read 方法,只有 write 方法。然而,它們?nèi)匀皇穷愇募ο螅虼四憧梢詫⑵渌魏?(類) 文件對象賦值給它們來重定向其輸出。

使用sys重定向輸出

復制代碼 代碼如下:

print 'Dive in'??????? # 標準輸出
saveout = sys.stdout??????? # 終在重定向前保存stdout,這樣的話之后你還可以將其設回正常
fsock = open('out.log', 'w')????? # 打開一個新文件用于寫入。如果文件不存在,將會被創(chuàng)建。如果文件存在,將被覆蓋。
sys.stdout = fsock???????????????? # 所有后續(xù)的輸出都會被重定向到剛才打開的新文件上。

print? 'This message will be logged instead of displayed'??? # 這樣只會將輸出結(jié)果“打印”到日志文件中;屏幕上不會看到輸出

sys.stdout = saveout?? # 在我們將 stdout 搞亂之前,讓我們把它設回原來的方式。????

fsock.close()???? # 關(guān)閉日志文件。

重定向錯誤信息

fsock = open('error.log', 'w')?????????? # 打開你要存儲調(diào)試信息的日志文件。
sys.stderr = fsock?????????????????????????? # 將新打開的日志文件的文件對象賦值給stderr以重定向標準錯誤。
raise Exception, 'this error will be logged'?? # 引發(fā)一個異常,沒有在屏幕上打印出任何東西,所有正常的跟蹤信息已經(jīng)寫進error.log

還要注意你既沒有顯式關(guān)閉日志文件,也沒有將 stderr 設回最初的值。

這樣挺好,因為一旦程序崩潰 (由于引發(fā)的異常),Python 將替我們清理并關(guān)閉文件

打印到 stderr

向標準錯誤寫入錯誤信息是很常見的,所以有一種較快的語法可以立刻導出信息

復制代碼 代碼如下:

>>> print 'entering function'
entering function
>>> import sys
>>> print >> sys.stderr, 'entering function'

entering function


print 語句的快捷語法可以用于寫入任何打開的文件 (或者是類文件對象)。

在這里,你可以將單個print語句重定向到stderr而且不用影響后面的print語句。

使用sys模塊退出程序

復制代碼 代碼如下:

import sys
sys.exit(1)

注意 sys.exit 并不是立即退出. 而是引發(fā)一個 SystemExit 異常. 這意味著你可以在主程序中捕獲對 sys.exit 的調(diào)用

捕獲sys.exit調(diào)用

復制代碼 代碼如下:

import sys
print "hello"
try:
??? sys.exit(1)
except SystemExit:?? # 捕獲退出的異常
??? pass??????????????????? # 捕獲后不做任何操作
print "there"


hello
there

如果準備在退出前自己清理一些東西(比如刪除臨時文件), 你可以配置一個 "退出處理函數(shù)"(exit handler), 它將在程序退出的時候自動被調(diào)用

另一種捕獲sys.exit調(diào)用的方法

復制代碼 代碼如下:

def exitfunc():
??? print "world"

sys.exitfunc = exitfunc? # 設置捕獲時調(diào)用的函數(shù)

print "hello"
sys.exit(1)???? # 退出自動調(diào)用exitfunc()后,程序依然退出了
print "there"? # 不會被 print

hello
world


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: а√天堂资源中文最新版地址 | 成人毛片国产a | 国产一区二区三区免费观看 | 欧美日韩一区二区三区在线观看 | 最新一区二区三区 | 69pao强力打造免费高清 | 蜜桃传媒一区二区亚洲AV | 無码一区中文字幕少妇熟女H | 国产2区 | 99视频在线观看精品 | 九九热精 | 日本三级一区二区三区 | 中文字幕在线精品 | 久久久久国产成人精品亚洲午夜 | 久久久人 | 亚洲精品一区二区三区四区 | 嫩草影院国产 | 国产成人精品综合 | 日韩午夜在线视频 | 特级全黄 | 欧美一级黄色网 | 国产91在线 | 欧美 | 国产欧美精品午夜在线播放 | 日本免费大片免费视频 | 国产欧美视频在线观看 | 国产精品亚洲片在线观看不卡 | 天天摸日日干 | 中文字幕 欧美 日韩 | 波多野结衣免费视频观看 | 亚洲三级国产 | 欧美激情二区三区 | 久久久久国产精品美女毛片 | 国产精品久久久久亚洲 | 中文字幕一区在线观看视频 | 杏美月av | 日本www.在线中文字幕 | 成人国内精品久久久久影院 | 亚洲精品国产成人 | 一级欧美在线的视频 | 亚洲视频观看 | 4hc44四虎www在线影院男同 |