sys介紹
“sys”即“system”,“系統”之意。該模塊提供了一些接口,用於訪問 Python 解釋器自身使用和維護的變量,同時模塊中還提供了一部分函數,可以與解釋器進行比較深度的交互。
常用方法
sys.argv
“argv”即“argument value”的簡寫,是一個列表對象,其中存儲的是在命令行調用 Python 腳本時提供的“命令行參數”。
這個列表中的第一個參數是被調用的腳本名稱,也就是說,調用 Python 解釋器的“命令”(python)本身並沒有被加入這個列表當中。
import sys
print("The list of command line arguments:\n", sys.argv)
輸出:
$ python sy1.py
('The list of command line arguments:\n', ['sy1.py'])
$ python sy1.py arg1 arg2 arg3
('The list of command line arguments:\n', ['sy1.py', 'arg1', 'arg2', 'arg3'])
sys.platform
查看sys模塊中的sys.platform屬性可以得到關於運行平臺更詳細的信息。
win
>>> import sys
>>> sys.platform
'win32'
在 Linux 上:
>>> sys.platform
'linux'
比較一下os.name的結果,sys.platform的信息更加準確。
sys.byteorder
“byteorder”
即“字節序”,指的是在計算機內部存儲數據時,數據的低位字節存儲在存儲空間中的高位還是低位。
“小端存儲”時,數據的低位也存儲在存儲空間的低位地址中,此時sys.byteorder的值爲“little”。如果不注意,在按地址順序打印內容的時候,可能會把小端存儲的內容打錯。當前大部分機器都是使用的小端存儲。
>>> sys.byteorder
'little'
而另外還存在一種存儲順序是“大端存儲”,即數據的高位字節存儲在存儲空間的低位地址上,此時sys.byteorder的值爲“big”。
>>> sys.byteorder
'big'
sys.executable
該屬性是一個字符串,在正常情況下,其值是當前運行的 Python 解釋器對應的可執行程序所在的絕對路徑。
>>> sys.executable
'/usr/bin/python'
sys.modules
該屬性是一個字典,包含的是各種已加載的模塊的模塊名到模塊具體位置的映射。
通過手動修改這個字典,可以重新加載某些模塊;但要注意,切記不要大意刪除了一些基本的項,否則可能會導致 Python 整個兒無法運行。
>>> sys.modules
{'copy_reg': <module 'copy_reg' from '/usr/lib64/python2.7/copy_reg.pyc'>, 'sre_compile': <module 'sre_compile' from '/usr/lib64/python2.7/sre_compile.pyc'>
sys.builtin_module_names
該屬性是一個字符串元組,其中的元素均爲當前所使用的的 Python 解釋器內置的模塊名稱。
注意區別sys.modules
和sys.builtin_module_names
——前者的關鍵字(keys)列出的是導入的模塊名,而後者則是解釋器內置的模塊名。
sys.builtin_module_names
('__builtin__', '__main__', '_ast', '_codecs', '_sre', '_symtable', '_warnings', '_weakref', 'errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'pwd', 'signal', 'sys', 'thread', 'zipimport')
sys.path
該屬性是一個由字符串組成的列表,其中各個元素表示的是 Python 搜索模塊的路徑;在程序啓動期間被初始化。
其中第一個元素(也就是path[0])的值是最初調用 Python 解釋器的腳本所在的絕對路徑;如果是在交互式環境下查看sys.path的值,就會得到一個空字符串。
#!/usr/bin/python
import sys
print sys.path
print sys.path[0]
print sys.path[1]
輸出:
$ python sy2.py
['/root/python/sys', '/usr/lib/python2.7/site-packages/s3cmd-2.0.2-py2.7.egg', '/usr/lib/python2.7/site-packages/python_magic-0.4.15-py2.7.egg', '/usr/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages']
/root/python/sys
/usr/lib/python2.7/site-packages/s3cmd-2.0.2-py2.7.egg
sys.stdin
即 Python 的標準輸入通道。通過改變這個屬性爲其他的類文件(file-like)對象,可以實現輸入的重定向,也就是說可以用其他內容替換標準輸入的內容。
所謂“標準輸入”,實際上就是通過鍵盤輸入的字符。
sys.stdin.readline() 相當於input,區別在於input不會讀入’\n’
實例1
import sys
print('Plase input your name: ')
name = sys.stdin.readline()
print('Hello ', name)
輸出:
Plase input your name:
hello world
('Hello ', 'hello world\n')
實例2
while True:
n = int(input('Please input a number:\n'))
sn = list(map(int,input('Please input some numbers:\n').split()))
print(n)
print(sn,'\n')
輸出:
Please input a number:
34
Please input some numbers:
34 353
34
[34, 353]
sys.stdout
與上一個“標準輸入”類似,sys.stdout則是代表“標準輸出”的屬性。
通過將這個屬性的值修改爲某個文件對象,可以將本來要打印到屏幕上的內容寫入文件。
實例1
import sys
# 以附加模式打開文件,若不存在則新建
with open("count_log.txt", 'a', encoding='utf-8') as f:
sys.stdout = f
for i in range(10):
print("count = ", i)
輸出:
$ cat count_log.txt
count = 0
count = 1
count = 2
count = 3
count = 4
count = 5
count = 6
count = 7
count = 8
count = 9
實例2:
import sys
sys.stdout.write('hello'+'\n')
print 'hello'
$ python sy7.py
hello
hello
sys.err
與前面兩個屬性類似,只不過該屬性標識的是標準錯誤,通常也是定向到屏幕的,可以粗糙地認爲是一個輸出錯誤信息的特殊的標準輸出流。由於性質類似,因此不做演示。
此外,sys模塊中還存在幾個“私有”屬性:sys.stdin,sys.stdout,sys.stderr。這幾個屬性中保存的就是最初定向的“標準輸入”、“標準輸出”和“標準錯誤”流。在適當的時侯,我們可以藉助這三個屬性將sys.stdin、sys.stdout和sys.err恢復爲初始值。
sys.exit(n)
功能:執行到主程序末尾,解釋器自動退出,但是如果需要中途退出程序,可以調用sys.exit函數,帶有一個可選的整數參數返回給調用它的程序,表示你可以在主程序中捕獲對sys.exit的調用。(0是正常退出,其他爲異常)
#!/usr/bin/env python
import sys
def exitfunc(value):
print value
sys.exit(0)
print "hello"
try:
sys.exit(1)
except SystemExit,value:
exitfunc(value)
print "come?"
輸出:
$ python sy11.py
hello
1
參考資料:
純潔的微笑
https://www.cnblogs.com/turtle-fly/p/3280519.html