主要介紹用的比較多的sys的模塊命令包括:sys.argv,sys.platform,sys.getdefaultencoding,sys.setdefaultencoding(),sys.getfilesystemencoding(),sys.exit(n),sys.path,sys.modules.keys(),sys.stdin,sys.stdout,sys.stderr 等。node
sys.argv 獲取參數
參數獲取從0開始,而不是1,0爲命令自己
#!/usr/bin/python
import sys
print "I the first arg :", sys.argv[1]
print "I the second arg :", sys.argv[2]
print "All of the args are :"
for i in sys.argv:
print i
python
執行結果:
[root@node1 python]# python arg.py hello python
I the first arg : hello
I the second arg : python
All of the args are :
arg.py
hello
pythonlinux
sys.platform 獲取當前操做系統平臺windows
具體的返回值以下:
>>> import sys
>>> sys.platform
'linux2'ide
操做系統 返回值
Linux (2.x and 3.x)
'linux2'
Windows
'win32'
Windows/Cygwin
'cygwin'
Mac OS X
'darwin'
OS/2
'os2'
OS/2 EMX
'os2emx'
RiscOS
'riscos'
AtheOS
'atheos'函數
實例:
根據不一樣操做系統判斷該使用什麼命令,例如在在linux 下用「clear」而在windows下用「cls」ui
#!/usr/bin/python
import sys
ostype = sys.platform
if ostype == "linux" or ostype == "linux2":
cmd = "clear"
else:
cmd = "cls"
print "The clear command is :", cmd
[root@node1 python]# python os.py
The clear command is : clearthis
sys.exit(n) 設置退出返回值(0表示正常退出,其餘非0整數表示不正常,能夠經過異常捕獲)編碼
#!/usr/bin/python
import sys
def exitFunc(value):
'''Clear function'''
print value
sys.exit()
print "hello"
try:
sys.exit(1)
except SystemExit,value:
exitFunc(value)
print "Ok"
[root@node1 python]# python esc.py
hello
1spa
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
在經過命令"import module_name"時,系統將在如下路徑中查找導入的模塊,其中第一個爲空,表示當前目錄
>>> import sys
>>> sys.path
['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk',
'/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages',
'/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages']
sys.modules.keys() 使用sys模塊查找已導入的模塊
>>> import sys
>>> print sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath',
'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport',
'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path',
'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os']
sys.getdefaultencoding() 獲取系統當前編碼,通常默認爲ascii。
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
sys.setdefaultencoding() 設置系統默認編碼
執行dir(sys)時不會看到這個方法,在解釋器中執行不經過,能夠先執行reload(sys),再執行 setdefaultencoding('utf8'),此時將系統默認編碼設置爲utf8。
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf8')
sys.getfilesystemencoding() 獲取文件系統使用編碼方式
>>> sys.getfilesystemencoding()
'UTF-8'
sys.stdin,sys.stdout,sys.stderr
標準輸入和標準錯誤 (一般縮寫爲 stdout 和 stderr) 是內建在每個 UNIX 系統中的管道。
當你 print 某些東西時,結果前往 stdout 管道;
當你的程序崩潰並打印出調試信息 (例如 Python 中的 traceback (錯誤跟蹤)) 的時候,信息前往 stderr 管道
stdout 是一個類文件對象;調用它的 write 函數能夠打印出你給定的任何字符串。
實際上,這就是 print 函數真正作的事情;它在你打印的字符串後面加上一個硬回車,而後調用 sys.stdout.write 函數。
>>> 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 和 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語句。
簡明教程中的實例
import sys
def readfile(filename):
'''Print a file to the standard output.'''
f = file(filename)
while True:
line = f.readline()
if len(line) == 0:
break
print line,
f.close()
if len(sys.argv) < 2:
print 'No action specified.'
sys.exit()
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
if option == 'version':
print "Version 1.2"
elif option == 'help':
print '''\
This program prints file to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help'''
else:
print 'Unknown option.'
else:
for filename in sys.argv[1:]:
readfile(filename)
執行結果:
[root@node1 python]# python cat.py
No action specified.
[root@node1 python]# python cat.py --help
This program prints file to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help
[root@node1 python]# python cat.py --version
Version 1.2
[root@node1 python]# python cat.py --t
Unknown option.
[root@node1 python]# python cat.py /tmp/test.txt
hello girl!
hello boy!
hello man!
工做原理:
定義readfile 函數逐行讀取文件,執行腳本後,判斷參數。若參數長度小於2(命令自己佔一個長度,也就是說,命令+參數),輸出No action specified.若參數是以「--」開頭(經過sys.startswith 獲取開頭),則從該參數的第3個字符起截取,好比--help,獲得的就是help若取得的值爲"help" 則顯示幫助信息,若取得的值爲"version",則顯示版本信息若沒有匹配到任何選項,則顯示「Unknown option」若直接加文件名,則打印出文件內容