python標準庫sys_Python標準庫之Sys模塊使用詳解

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

處理命令行參數

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

使用sys模塊獲得腳本的參數

復制代碼代碼如下:

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采集參數個數-1為減去[0]腳本名稱

for arg in sys.argv[1:]: #輸出除了[0]外所有參數

print arg

else:

print "there are no arguments!"

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

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

處理模塊

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

啟動 Python 時,這個列表從根據內建規則, PYTHONPATH 環境變量的內容, 以及注冊表( Windows 系統)等進行初始化.

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

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

復制代碼代碼如下:

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

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

import sample

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

import random

使用sys模塊查找內建模塊

builtin_module_names 列表包含 Python 解釋器中所有內建模塊的名稱

復制代碼代碼如下:

def dump(module):

print module, "=>",

if module in sys.builtin_module_names: #查找內建模塊是否存在

print ""

else:

module = _ _import_ _(module) #非內建模塊輸出模塊路徑

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 語句在從磁盤導入內容之前會先檢查這個字典.

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

復制代碼代碼如下:

print sys.modules.keys()

['os.path', 'os', 'exceptions', '_ _main_ _', 'ntpath', 'strop', 'nt',

'sys', '_ _builtin_ _', 'site', 'signal', 'UserDict', 'string', 'stat']

使用sys模塊獲得當前平臺

sys.platform 返回當前平臺 出現如: "win32" "linux2" 等

處理標準輸出/輸入

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

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

當你的程序崩潰并打印出調試信息 (例如 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 是一個類文件對象;調用它的 write 函數可以打印出你給定的任何字符串。

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

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

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

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

它們都沒有 read 方法,只有 write 方法。然而,它們仍然是類文件對象,因此你可以將其它任何 (類) 文件對象賦值給它們來重定向其輸出。

使用sys重定向輸出

復制代碼代碼如下:

print 'Dive in' # 標準輸出

saveout = sys.stdout # 終在重定向前保存stdout,這樣的話之后你還可以將其設回正常

fsock = open('out.log', 'w') # 打開一個新文件用于寫入。如果文件不存在,將會被創建。如果文件存在,將被覆蓋。

sys.stdout = fsock # 所有后續的輸出都會被重定向到剛才打開的新文件上。

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

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

fsock.close() # 關閉日志文件。

重定向錯誤信息

fsock = open('error.log', 'w') # 打開你要存儲調試信息的日志文件。

sys.stderr = fsock # 將新打開的日志文件的文件對象賦值給stderr以重定向標準錯誤。

raise Exception, 'this error will be logged' # 引發一個異常,沒有在屏幕上打印出任何東西,所有正常的跟蹤信息已經寫進error.log

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

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

打印到 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 并不是立即退出. 而是引發一個 SystemExit 異常. 這意味著你可以在主程序中捕獲對 sys.exit 的調用

捕獲sys.exit調用

復制代碼代碼如下:

import sys

print "hello"

try:

sys.exit(1)

except SystemExit: # 捕獲退出的異常

pass # 捕獲后不做任何操作

print "there"

hello

there

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

另一種捕獲sys.exit調用的方法

復制代碼代碼如下:

def exitfunc():

print "world"

sys.exitfunc = exitfunc # 設置捕獲時調用的函數

print "hello"

sys.exit(1) # 退出自動調用exitfunc()后,程序依然退出了

print "there" # 不會被 print

hello

world

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python3.7知識點匯總

Python3.7從零開始學 —|進入Python3.7的精彩世界 —|---|Python起源 —|---|—|Python作者簡介 —|---|—|---|Guido von Rossum&#xff0c;荷蘭人。1982年&#xff0c;Guido從阿姆斯特丹大學獲得了數學和計算機碩士學位。1989年&#xff0c;他創立了Python語言。 —|---|—|…

塊編碼、對象編碼、小波編碼、分布式編碼【轉貼】

人類獲取的信息中70%來自于視覺&#xff0c;視頻信息在多媒體信息中占有重要地位&#xff1b;同時視頻數據冗余度最大&#xff0c;經壓縮處理后的視頻質量高低是決定多媒體服務質量的關鍵因素。因此數字視頻技術是多媒體應用的核心技術&#xff0c;對視頻編碼的研究已成為信息技…

cookie練習

cookie是網站便于辨別用戶身份&#xff0c;進行 session 跟蹤而儲存在用戶本地終端上的數據。 cookie通過jsdom操作完成。 添加cookie&#xff1a; document.cookie ‘name val’;前一個是name&#xff0c;后一個是val。添加的時間是永久的。 document.cookie ‘name val ;…

算法學習系列(十):用數組模擬鏈表、雙鏈表、棧、隊列、單調棧、單調隊列

目錄 引言一、數組模擬鏈表1.模板2.例題3.測試 二、數組模擬雙鏈表1.模板2.例題3.測試 三、數組模擬棧1.模板2.例題3.測試 四、數組模擬隊列1.模板2.例題3.測試 五、數組模擬單調棧1.例題模板2.測試 六、數組模擬單調隊列1.例題模板2.測試 引言 首先說一下為什么要拿數組來模擬…

為什么你的路由器穿墻能力差?看完秒懂

1、信號弱賴我咯? 不管你承認與否&#xff0c;只要有墻家中就會存有信號死角&#xff0c;不要小看一墻之隔。如何讓路由器的信號增強? 網上一搜旁門左道真不少&#xff0c;什么調整天線尋找合理角度&#xff0c;又或是用易拉罐DIY一個信號放大器&#xff0c;然鵝并非簡單的將…

fish工具_Python程序員使用哪些開發工具

Python程序員使用哪些開發工具?很多Python學習者想必都會有如下感悟&#xff1a;最開始學習Python的時候&#xff0c;因為沒有去探索好用的工具&#xff0c;吃了很多苦頭。后來工作中深刻體會到&#xff0c;合理使用開發的工具的便利和高效。今天&#xff0c;北京學佳澳小編總…

[shiro學習筆記]第二節 shiro與web融合實現一個簡單的授權認證

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/39933993shiro官網: http://shiro.apache.org/shiro中文手冊&#xff1a;http://wenku.baidu.com/link?urlZnnwOHFP20LTyX5ILKpd_P94hICe9Ga154KLj_3cCDXpJWhw5Evxt7sfr0B5QSZYXOKqG_FtHeD-RwQvI5ozyT…

Web安全之Cookie劫持

1.Cookie是什么? 2.竊取的原理是什么? 3.系統如何防Cookie劫持呢? 看完這三個回答&#xff0c;你就明白哪位傳奇大俠是如何成功的!!! Cookie: HTTP天然是無狀態的協議&#xff0c;為了維持和跟蹤用戶的狀態&#xff0c;引入了Cookie和Session。Cookie包含了瀏覽器客戶端的用…

python中關于深拷貝和淺拷貝的詳解

python中關于深拷貝和淺拷貝的詳解 概述 在python的語法中,有兩種變量的拷貝方式 一種是深拷貝,一種是淺拷貝 我們先說深拷貝 語法 這里需要通過導入系統的copy模塊中的deepcopy才可以 import copy 新的對象 copy.deepcopy(被拷貝對象) 解釋 深拷貝是將操作對象整體復制…

運動估計簡介

運動估計( Motion Estimation) 維基百科鏈接&#xff1a;http://en.wikipedia.org/wiki/Motion_estimation運動估計的應用有很多&#xff0c;最初的應用的領域是視頻的編碼。運動估計算法一般分為: 像素遞歸法pel-recursive algorithm (PRA)和塊匹配法 block-matching algorith…

tutte定理證明hall定理_深入淺出|中心極限定理(Central Limit Theorem)及證明

在介紹統計學中最重要的定理之一-中心極限定理-之前&#xff0c;我們先來想一個問題&#xff1a;統計學的目的是什么&#xff1f;根據<Mathematical statistics with application 7th Edition>書中所寫的&#xff1a;統計學的目的是基于從總體中的樣本所獲得的信息&#…

讓數據中心變得更加友好

通常來說&#xff0c;數據中心是一個安全防護十分嚴密的地方&#xff0c;其安全功能的設計旨在阻止不速之客的訪問。但專家認為數據中心可以變得更加友好&#xff0c;因為數據中心需要在人類社會中發揮更大的作用。 數據中心的整體概念是一種可以通過云計算或其他方法進行遠程訪…

traceroute/tracert--獲取網絡路由路徑

traceroute 是用來檢測發出數據包的主機到目標主機之間所經過的網關數量的工具。traceroute 的原理是試圖以最小的TTL發出探測包來跟蹤數據包到達目標主機所經過的網關&#xff0c;然后監聽一個來自網關ICMP的應答。發送數據包的大小默認為 38個字節。 通過traceroute我們可以知…

使用Cygwin實現vlc 1.0.5的wince移植

本文完全參照了天將降的博客文章&#xff0c;寫于此以作來日備忘之用&#xff0c;原文地址&#xff1a;http://bk6.blog.163.com/blog/static/24498560201051193449196/ 第一步&#xff1a;下載安裝Cygwin。筆者建議大家不要安裝不完整的版本&#xff0c;以免出現不必要的錯誤…

andriod studio 運行 無結果_華為物聯網操作系統LiteOS內核教程01——IoT-Studio介紹及安裝...

1. 物聯網一站式開發工具 —— IoT StudioIoT Studio 是支持 LiteOS 嵌入式系統軟件開發的工具&#xff0c;提供了代碼編輯、編譯、燒錄 及調試等一站式開發體驗&#xff0c;支持 C、C、匯編等多種開發語言&#xff0c;讓您快速&#xff0c;高效地進 行物聯網開發。2. IoT Stud…

5G通信技術能否終結商用WiFi?

科技創新與體育發展可謂相生相伴&#xff0c;而如今科技在體育領域的應用也越來越廣泛。本周的話題關于5G技術與球場&#xff0c;作者為英國體育娛樂營銷咨詢公司Stadia Solutions的聯席首席執行官戈登坎貝爾。在坎貝爾先生看來&#xff0c;球場Wi-Fi賦予了俱樂部對數據的掌控力…

顏色轉換

以藍色為例&#xff0c;#0000FF應該被表示成rgb(0,0,255)。 我們將函數命名為getRGB() &#xff08;可以將字符串視為數組&#xff0c;這個數組的元素為字符&#xff09; function getRGB(color) {var rgb [parseInt(0xcolor.slice(1,3)),parseInt(0xcolor.slice(3,5)),parseI…

wince ./configure

CPPFLAGS"-I/usr/wince/include -D_WIN32_WCE0x0500" LDFLAGS"-L/usr/wince/lib" ./configure--hostarm-mingw32ce 指定軟件運行的系統平臺&#xff1b;host就是你編譯好的程序可以運行的平臺--target-osmingw32ce 指定軟件面向(target to)的系統平臺.這主…

android 按鍵會觸發ontouch嗎?_Android實現炫酷的拖拽浮動按鈕

IOS的Assistive Touch效果很炫酷&#xff0c;可以任意拖拽&#xff0c;同時點擊后會展開菜單欄。然而&#xff0c;這不只是IOS的特權&#xff0c;Android也可以實現。但是由于懸浮窗需要申請權限&#xff0c;所以本文僅在app內實現&#xff0c;可以任意拖拽&#xff0c;并可以響…

強名稱程序集(strong name assembly)——為程序集賦予強名稱

引言&#xff1a;在曾經的項目開發中&#xff0c;在程序集中見到過一個后綴為*.snk的文件。當時看這個文件的圖標。感覺可能是企業內部保護版權啥的一種方式。一&#xff0c;強程序集攻克了哪些問題&#xff1f;1&#xff0c;唯一標識一個程序集2&#xff0c;放置程序集被仿冒和…