1.python解釋器提供提供的小工具html
1.1 一秒鐘啓動一個下載服務器 進入要下載文件的目錄(shift+鼠標右鍵能夠很快的在當前目錄打開一個cmd) python2: python2 -m SimpleHTTPServer (python2中的模塊,在python3中已經整合到http.server模塊中) python3: python -m http.server 其原理是打開了一個python中內置的web服務器,相似於FTP,默認端口爲8000,若是存在index.html則會打開此文件,若是不存在則顯示當前目錄下的文件列表 1.2 快速轉化json字符串爲json對象(linux系統中) $ echo '{"links":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]}' | python -m json.tool 1.3 檢查第三方庫是否正確安裝 使用import paramiko 批量檢查:python -c "import paramiko"
2.python中pip高級用法python
2.1 pip介紹
pip是最流行的包管理工具。
pip功能強大,支持安裝和卸載,期對手easy_install則只支持安裝,pip能夠很好的支持虛擬環境,能夠經過requirements.txt集中管理依賴,可以處理二進制格式(.whl),pip是先下載後安裝,若是安裝失敗,也會清理乾淨
python2中是pip,python3中是pip3
2.2 pip經常使用命令
升級
pip install -U pip
查找安裝包
pip search paramiko
安裝特定版本的包
pip install paramiko==0.2.8
刪除安裝包
pip uninstall paramiko
查看安裝包信息
pip show paramiko
查看安裝包的依賴是否完整
pip check paramiko
查看已安裝包的列表
pip list
處處系統已安裝包的列表到requirements文件 能夠到其餘服務器上直接安裝軟件
pip freeze > d:\requirements.txt
從requirements文件中安裝
pip install -r requirements.txt
使用pip補全
pip completion --bash >> ~/.profile
$source ~/.profile
2.3 pip加速安裝技巧
pip的下載地址是在pypi.python.org,有點餓時候特別慢,也不穩定,若是要使用國內第三方的源,就能提升下載速度,只須要在下載的時候添加-i參數便可
pip install -i http://pypi.douban.com/simple/ paramiko
也能夠將軟件下載到本地部署,經過這中下載會將軟件的全部依賴包也下載到本地(離線下載的時二進制包)
pip install --download=="test" -r requirements.txt 從requirements.txt中下載包到test下
本地安裝
pip install --no-index -f(-find-links) file://'test' -r requirements.txt
3.python的工做環境linux
pyenv:用於管理不一樣的python的版本
virtualenv:用於管理不一樣的工做環境
4.python os,sys模塊(跨平臺)git
判斷一個文件是否存在,若是不存在,則提示,若是存在,則判斷文件是否可讀github
import sys #導入模塊 import os def test(): sys.argv.append(" ") #向argv列表中添加一個空元素,若是在執行時忘記添加參數,而又沒有第一個元素的話,程序會報錯 filename = sys.argv[1] #將argv中的下標爲1的元素賦值給filename if not os.path.isfile(filename): #經過os模塊中path子模塊中的isfile判斷文件是否存在 raise SystemExit(filename + ' 不存在哦') #若是不存在,則打印文件不存在 elif not os.access(filename,os.R_OK): #若是存在的話則經過os模塊的access子模塊判斷是否可讀 raise SystemExit(filename + ' 不能夠讀寫') #若是可讀,則打印危機愛你能夠讀寫 else: print (filename + ' 能夠讀寫')
if __name__ == '__main__': test()
執行結果
E:\python 20>python json.py json.py
['json.py', 'json.py'] #是打印argv列表元素
json.py 能夠讀寫
sys.argv:是sys庫下面的列表,該列表保存了全部的命令行參數,其中下標爲0的元素是執行文件的名字,其他的參數已字符串的形式保存在該列表中
此列表能夠從終端接收無數個參數,而存放在列表當中,若是沒有第一個參數的話,程序會報錯,而沒法執行,因此在argv中添加一個空元素,當python json.py test.txt有參數的時候,test.txt就成了argv的第一個元素
os.path.isfile(filename):判斷文件是否存在
os.access(path,mode):判斷文件是否可讀
raise:python中的異常處理,當程序出現錯誤,python會自動引起異常,也能夠經過raise顯示地引起異常。一旦執行了raise語句,raise後面的語句將不能執行
python使用stdin和fileinput讀取標準輸入web
從所周知,shell腳本有一個全部語言都沒有的有點,那就是管道,經過管道符,咱們可使用多個簡單的命令來實現一個複雜的功能。
所以,咱們但願在Python中使用管道來結合Python語言和shell語言的優點(經過管道來將shell語言和Python語言一塊兒使用
在Python標準庫sys中有三個文件描述符分別是:stdin(標準輸入 0,指的是經過<或者|來傳遞數據),stdout(標準輸出 1),stderr(標準錯誤 2)。經過標準輸入結合管道,就不須要經過open()函數來打開文件了。
1.使用sys庫中的stdin讀取內容(linux中的標準輸入)
windows
建立 tes_sys_stdin.py文件
import sys
name = sys.stdin.readline()
print (name)
linux:
建立 test_sys_stdin.py文件
import sys
for line in sys.stdin():
print (line)
執行test_sys_stdin.py文件:
cat /etc/passwd | python test_sys_stdin.py
python test_sys_stdin.py < /etc/passwd
也能夠經過stdin.readlines()函數將標準輸入的內容讀取到一個列表裏面
sys.stdin.readline( )會將標準輸入所有獲取,包括末尾的'\n',所以用len計算長度時是把換行符'\n'算進去了的,可是input( )獲取輸入時返回的結果是不包含末尾的換行符'\n'的。
所以若是在平時使用sys.stdin.readline( )獲取輸入的話,不要忘了去掉末尾的換行符.
能夠用strip( )函數(sys.stdin.readline( ).strip('\n'))或sys.stdin.readline( )[:-1]這兩種方法去掉換行。shell
2.使用fileinput標準庫讀取內容(普通的讀取文件)
fileinput()能夠進行多文件的處理,使用fileinput能夠讀取命令行給出的多個文件,也就是說fileinput會便利argv[1:]列表,並按行一次讀取列表中的文件,若是該列表爲空,則fileinput默認讀取標準輸入的內容
建立sys_fileinput.py文件
windows:
import fileinput
for line in fileinput.input(files=('123','456')): #讀取文件
print(line)
linux:
import fileinput
for line in fielinput.input():
print (line)
執行方法:
cat /etc/passwd |python sys_fileinput.py
python sys_fileinput.py /etc/passwd
python sys_fileinput.py /etc/passwd /etc/hosts
fileinput()方法:
print (fileinput.filename()) #當前正在讀取的文件名
print (fileinput.fileno()) #文件描述符
print (fileinput.filelineno()) #正在讀取的行是當前文件的第幾行
print (fileinput.isfirstline()) #正在讀取的行是不是當前文件的第一行
print (fileinput.isstdin()) #正在讀取文件仍是直接從標準輸入中讀取內容
3.使用stdout和stderr向標準輸出和標準錯誤中輸入信息
import os
sys.stdout.write("標準輸出") 等價於 print('標準輸出')
sys.stderr.write("標準錯誤")
在python中調用print時,事實上調用了sys.stdout.write(obj+'\n')
print 將須要的內容打印到控制檯,而後追加一個換行符。數據庫
5.使用getpass讀取密碼編程
import getpass user = getpass.getuser() #linux/windows獲取到的用戶都是當前用戶 passwd = getpass.getpass('your password:') #用戶輸入的密碼不在控制檯上顯示,可是pycharm有個小bug,不能實現這個函數 print (user,passwd)
6.python管理Linux系統(os,sys標準庫進階,跨平臺)json
在管理Linux系統不少狀況下就是在對文件進行管理,這是由於UNIX及其衍生物Linux中:一切都被看做是文件!!
如:普通文件,硬盤,sockect接口,連接符號,命名管道,甚至目錄都被當作是一個文件,檔把全部東西都當作是文件之後,一個顯著的優勢就是:能夠在輸入和輸出資源上使用同一組Linux工具,程序和Api。
1.文件讀寫
文件能夠從多個維度進行管理:文件重命名,獲取文件屬性,判斷文件是否存在,備份文件,讀寫文件,打包解壓等等。
在python讀取文件只須要經過內置函數open來打開文件便可,open函數接受文件名稱和打開模式做爲參數,返回一個文件對象,操做完文件以後,經過文件對象的close方法關閉便可
info = open('456',encoding='utf-8') #要加上編碼方式,讀取到info文件對象裏面
print(info.read()) #經過info文件對象的read方法讀取文件的全部內容,並打印
info.close() #關閉這個文件對象
open函數默認以"r"的方式打開,也能夠知道那個文件的打開模式
r:默認以讀的方式打開,若是文件不存在,拋出FileFoundError異常
w:以寫模式打開,若是文件非空,則已有的內容將會被覆蓋,若是文件不存在,將建立文件並寫入
a:在文件末尾追加數據的方式寫入
x:建立一個新文件,若是文件存在,則拋出FileExisError異常
r+:可讀寫文件。可讀;可寫;可追加
w+:寫讀
U:表示在讀取時,能夠將\r\n自動轉換成 \n (與 r 或 r+ 模式同使用, rU或者r+U)
b:表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)
open函數的其餘方法
info.close() #關閉文件
info.flush() #刷新緩衝區,將緩衝區的數據當即寫入到文件
info.isatty() #判斷文件是否鏈接到終端設備,返回bool值
info.read(10) #讀取文件前10個字符,從文件中讀取指定的字符數,默認讀取所有
info.readline(3)) #讀取前3個字符,默認每次最多讀取一行數據,每行的最後包含換行符'\n'
info.readlines() #將文件存入到列表中,列表中的麼一行就是文件中的每一行
info.readable #判斷文件是否可讀,返回布爾值
info.seek(3) #移動文件讀取的指針,若是文件中包含中文,移動指針必須是3的倍數,否則會報錯,由於一箇中文字符等於3個字節
info.seekable #判斷文件指針是否可用,返回布爾值
info.tell() #獲取指針位置
info.truncate() #截斷,把指針後面的內容刪除,並寫入文件,要在可寫模式下操做
f = open('text.txt','r+',encoding='utf-8')
f.seek(9) #把指針移動到第9個字節後面(即第3箇中文後面)
f.truncate() #把第3箇中文後面的字符刪除,並寫入文件
f.close()
info.writable() #判斷文件是否可寫,返回布爾值
info.write() #把字符串寫入文件,並返回字符數
info.writelines() #寫一個字符串列表到文件
在計算機中,每打開一個文件就須要佔用一個文件句柄,而一個進程擁有的文件句柄是有限的,而且文件句柄也會佔用操做系統的資源,因此,在打開文件之後要及時關閉文件,避免文件句柄泄露
1.可使用finally關閉文件句柄,而且在什麼狀況是都會關閉(可是不提倡,由於python提倡優美,簡潔)
try:
info = open("test.txt",encoding='utf-8')
peint(info)
finally:
info.close()
2.使用上下文管理器(會打開文件,而後自動關閉,不用close函數)
with open('data.txt',encoding='utf-8') as info:
print(info.read())
如何讀取大文件?
使用上下文管理器和for循環,由於for循環不只能夠遍歷如字符串,列表,元祖等可迭代序列,還可使用可迭代協議來便利迭代對象,文件對象就實現了可迭代協議
with open('data',encoding='utf-8') as info:
for line in info:
print(line.upper())
使用print語句也能夠將數據寫入到文件
with open ("456","a+",encoding="utf-8") as info:
print(1,2,'hello,world',sep='\n',file=info)
2.文件與文件路徑管理
python標準庫中的os模塊對操做系統的api進行了封裝,而且使用同一個api接口來管理不一樣的操做系統的相同功能。
os模塊包含與操做系統的系統環境,系統變量,系統文件,用戶數據庫以及權限進行交換的函數
2.1 os模塊
os模塊中包含兩個比較經常使用的函數
os.getcwd() #獲取當前絕對路徑
os.listdir() #列出當前目錄下的文件和文件夾
2.2 os.path詳解(用來對文件和文件路徑進行管理)
拆分路徑
os.path.split() #返回一個二元組,包含文件路徑和文件名
os.path.dirname() #返回文件的路徑
os.path.basename() #返回文件名
os.path.splitext() #返回一個去處擴展名部分和擴展名的二元組
import os
path = "/root/p0st/h/error.log"
print(os.path.split(path)) --->('/root/p0st/h', 'error.log')
print(os.path.dirname(path)) --->/root/p0st/h
print(os.path.basename(path)) --->error.log
print(os.path.splitext(path)) --->('/root/p0st/h/error', '.log')
構建路徑
os.path.expanduser('~')#返回當前輸入用戶的家目錄,必須得加~或~adm等指定用戶
os.path.abspath() #返回文件或路徑的絕對路徑
os.path.path() #根據不一樣的操做系統,使用不一樣的路徑分隔符拼接路徑
import os
print(os.path.expanduser('~adm')) --->/var/adm
print(os.path.abspath('456')) --->E:\oldboy\python 20\456
print(os.path.join(os.path.expanduser('~'),'123','456.txt')) --->/var/adm/123/456.txt
判斷一個路徑是否爲絕對路徑
import os
os.path.isabs(os.path.join(os.path.expanduser('~adm'),'123','456.txt')) --->True
查看當前文件名字須要使用__file__這個特殊變量:當前代碼所在的源文件
import os
path = os.path.abspath(__file__)
print(path) --->/var/adm/123/456.py
print(os.path.abspath(os.path.join(os.path.dirname(path),os.path.pardir))) -->/var
獲取文件屬性和判斷文件類型
import os
path= os.path.abspath(__file__)
print(os.path.getatime(path)) #獲取當前文件的訪問時間
print(os.path.getctime(path)) #獲取當前文件的建立時間
print(os.path.getmtime(path)) #獲取當前文件的修改時間
print(os.path.getsize(path)) #獲取當前文件的大小
print(os.path.exists(path)) #判斷當前路徑是否存在
print(os.path.isfile(path)) #參數所指的路徑存在,而且是一個文件
print(os.path.isdir(path)) #參數所所指的路徑存在,而且是一個目錄
print(os.path.islink(path)) #。。。。。。。而且是一個連接
print(os.path.ismount(path)) #。。。。。。。而且是一個掛載點
使用os模塊管理文件和目錄
os.remove(path)/unlink(path): 刪除path所指的文件
os.rmdir(path)/removedirs(path) : 刪除path所指向的目錄,該文件夾必須爲空,不然報錯。
os.mkdir(path):建立一個文件夾
os.rename('olddir','newdir'):修改一個文件夾的名字
使用os模塊來修改和判斷文件權限
os.chmod(filename,0777) #修改文件權限
os.access(filename,os.R_OK)#判斷文件權限---> os.R_OK:是否可讀, os.W_OK:是否可寫, os.X_OK:是否可執行
""" 經過命令行讀取文件名稱,若是文件存在,則查看是否能執行,不能的話修改權限爲777,若是可執行的話就打印輸出文件內容,若是文件不在,則提示文不存在 """ # _*_ encoding:utf-8 _*_ import os import sys sys.argv.append('') file_name = sys.argv[1] def read_file(): if not os.path.isfile(file_name): raise SystemExit(file_name + " 文件不存在") elif os.access(file_name,os.X_OK): with open(file_name) as info: print(info.read()) else: os.chmod(file_name,0777) print("已修改成0777") if __name__ == '__main__': read_file()
""" 打印最經常使用的十條linux命令 """ #_*_ encoding:utf-8 _*_ import os from collections import Counter c = Counter() with open(os.path.expanduser('~/.bash_history')) as cmd_info: for line in cmd_info: cmd = line.strip().split() if cmd: c[cmd[0]]+=1 print(c.most_common(10))
7.python運維經常使用模塊
一、psutil是一個跨平臺庫(https://github.com/giampaolo/psutil) 可以實現獲取系統運行的進程和系統利用率(內存,CPU,磁盤,網絡等),主要用於系統監控,分析和系統資源及進程的管理。 二、IPy(http://github.com/haypo/python-ipy),輔助IP規劃。 三、dnspython(http://dnspython.org)Python實現的一個DNS工具包。 4、difflib:difflib做爲Python的標準模塊,無需安裝,做用是對比文本之間的差別。 5、filecmp:系統自帶,能夠實現文件,目錄,遍歷子目錄的差別,對比功能。 6、smtplib:發送電子郵件模塊 七、pycurl(http://pycurl.sourceforge.net)是一個用C語言寫的libcurl Python實現,功能強大,支持的協議有:FTP,HTTP,HTTPS,TELNET等,能夠理解爲Linux下curl命令功能的Python封裝。(PS:PycURL在前幾天的文章裏有說起過) 8、XlsxWriter:操做Excel工做表的文字,數字,公式,圖表等。 9、rrdtool:用於跟蹤對象的變化,生成這些變化的走走勢圖 十、scapy(http://www.wecdev.org/projects/scapy/)是一個強大的交互式數據包處理程序,它可以對數據包進行僞造或解包,包括髮送數據包,包嗅探,應答和反饋等功能。 11、Clam Antivirus免費開放源代碼防毒軟件,pyClamad,可讓Python模塊直接使用ClamAV病毒掃描守護進程calmd。 12、pexpect:能夠理解成Linux下expect的Python封裝,經過pexpect咱們能夠實現對ssh,ftp,passwd,telnet等命令行進行自動交互,而無需人工干涉來達到自動化的目的。 1三、paramiko是基於Python實現的SSH2遠程安裝鏈接,支持認證及密鑰方式。能夠實現遠程命令執行,文件傳輸,中間SSH代理等功能。相對於Pexpect,封裝的層次更高,更貼近SSH協議的功能,官網地址:http://paramiko.org(依賴:Crypto,Ecdsa,Python開發包python-devel) 1四、fabric是基於Python實現的SSH命令行工具,簡化了SSH的應用程序部署及系統管理任務,它提供了系統基礎的操做組件,能夠實現本地或遠程shell命令,包括命令執行,文件上傳,下載及完整執行日誌輸出等功能。Fabric在paramiko的基礎上作了更高一層的封裝,操做起來更加簡單。官網地址:http://www.fabfile.org(依賴setuptools,Crypto,paramiko包支持) 15、CGIHTTPRequestHandler實現對CGI的支持。 1六、ansible(http://www.ansibleworks.com/)一種集成IT系統的配置管理,應用部署,執行特定任務的開源平臺。基於Python實現,由Paramiko和PyYAML兩個關鍵模塊構建。Ansibl與Saltstack最大的區別是Ansible無需在被控主機上部署任何客戶端,默認直接經過SSH通道進行遠程命令執行或下發功能。 17、YAML:是一種用來表達數據序列的編程語言。 18、playbook:一個很是簡單的配置管理和多主機部署系統。 1九、saltstack(http://saltstack.com)是一個服務器基礎架構集中化管理平臺,通常能夠理解爲簡化版的puppet和增強版的func。Saltstack基於Python語言實現,結合輕量級消息隊列ZeroMQ,與Python每三方模塊(Pyzmq,PyCrypto,Pyjinja2,python-msgpack和PyYAML等)構建。 20、func,爲解決集羣管理,監控問題需設計開發的系統管理基礎框架。
8.python分佈式框架
Celery - 分佈式任務隊列
web