python用paramiko將執行的結果存入excel表格


一、paramiko

  利用paramiko可以遠程控制服務器,上傳和下載文件。

 1、paramiko密碼登錄方式:

 1 #!/usr/bin/env python
 2 #coding:utf-8import paramiko
 3 
 4 ssh = paramiko.SSHClient()    #創建鏈接
 5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 6 #在遠程服務器上設置簽名。第一次登錄服務器時,會輸入YES/No 
 7 #在用戶目錄/.ssh/known_hosts文件里會有主機的登錄簽名。如果沒有記錄,在第一次登錄時顯示YES/NO
 8 ssh.connect('192.168.1.108', 22, 'alex', '123')        #連接輸入的信息
 9 stdin, stdout, stderr = ssh.exec_command('df')        #執行命令
10 print stdout.read()    #打印結果
11 ssh.close();    #關閉鏈接            
paramiko密碼登錄

 2、paramiko密鑰對登錄方式:

  密鑰的方式,
  1.生成密鑰對
  2.將自己的公鑰傳至目標服務器
  3.提取自己私鑰的路徑
  4.建立連接
 1 ssh-keygen -t rsa    #生成一個自己的公鑰
 2 ssh-copy-id -i chenchao@192.168.1.100    #發送自己的公鑰到目標服務器的登錄用戶的家目錄下,默認會到當前用戶的目錄下去找公鑰  ~/.ssh/id_rsa.pub,下次在登錄時就不在需要密碼了
 3 
 4 import paramiko
 5 
 6 private_key_path = '/root/.ssh/id_rsa'    #聲明自己的私鑰在哪里  private:私有的
 7 key = paramiko.RSAKey.from_private_key_file(private_key_path)    #取出私鑰,保存
 8 ssh = paramiko.SSHClient()    #創建鏈接
 9 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    #第一次登錄時,自動設置簽名 YES/NO
10 ssh.connect('主機名 ', 端口, username='用戶名', pkey=key)        #登錄的信息
11 stdin, stdout, stderr = ssh.exec_command('df')        #執行命令
12 print stdout.read()
13 ssh.close()
paramiko密鑰對登錄

  3、遠程上傳下載文件: 

 1 #!/usr/bin/env python
 2 #conding:utf-8
 3 
 4 import paramiko
 5 
 6 
 7 t = paramiko.Transport(('192.168.1.107',22))  #創建鏈接
 8 t.connect(username='root',password='pwd@123')  #輸入目標服務器的用戶名和密碼
 9 
10 sftp = paramiko.SFTPClient.from_transport(t)    #生成連接對象
11 
12 sftp.put('/python/coder/connect.py','/opt/test.py')   #上傳  源地址文件  目標地址文件
13 #sftp.get('/opt/123.txt','/python/coder/123.txt')        #下載
14 t.close()
paramiko傳送文件

    1、先將執行的結果放入一個文件中

    2、逐行讀取文件,將每行的內容按照空格分割成列表

    3、在利用csv模塊方法,將分割的列表寫入到csv后綴的表格文件中

 

二、將paramiko執行的結果放入excel表格文件里

  1、python中自帶csv模塊

    • 用python讀取csv文件  

    csv是逗號分隔符格式 一般我們用的execl生成的格式是xls和xlsx  直接重命名為csv的話會報錯:

    Error: line contains NULL byte

    insun解決方案:出錯原因是直接是把后綴為xls的execl文件重命名為csv的 正常的要是另存為csv文件 就不會報錯了

    譬如我們有這么個csv文件:

    

    

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3   
4 import csv
5 with open('egg.csv','rb') as f:
6 reader = csv.reader(f)
7 for row in reader:
8 print row

  

  打印出來是這樣的list

  ['a', '1', '1', '1']

  ['a', '2', '2', '2']

  ['b', '3', '3', '3']

  ['b', '4', '4', '4']

  ['b', '5', '5', '5']

    • 用python寫入並生成cs

    

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3   
 4 import csv
 5 with open('egg2.csv', 'wb') as csvfile:
 6 spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL)
 7 spamwriter.writerow(['a', '1', '1', '2', '2'])
 8 spamwriter.writerow(['b', '3', '3', '6', '4'])
 9 spamwriter.writerow(['c', '7', '7', '10', '4'])
10 spamwriter.writerow(['d', '11','11','11', '1'])
11 spamwriter.writerow(['e', '12','12','14', '3'])

  

  這樣存進去的是存到一列了 跟我們原本意圖存進5列不一樣

  使用python的csv生成excel所兼容的csv文件的話,主要就是創建writer時的參數時要有dialect=’excel’

  代碼修改為:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3   
 4 import csv
 5 with open('egg2.csv', 'wb') as csvfile:
 6 spamwriter = csv.writer(csvfile,dialect='excel')
 7 spamwriter.writerow(['a', '1', '1', '2', '2'])
 8 spamwriter.writerow(['b', '3', '3', '6', '4'])
 9 spamwriter.writerow(['c', '7', '7', '10', '4'])
10 spamwriter.writerow(['d', '11','11','11', '1'])
11 spamwriter.writerow(['e', '12','12','14', '3'])

 

  2、利用paramiko與csv結合

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 
 4 import paramiko
 5 import csv
 6 
 7 ssh = paramiko.SSHClient()  #創建鏈接
 8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #設置第一次登錄的yes/no
 9 ssh.connect('192.168.1.108',22,'root','Pwd@1234')      #密碼登錄方式
10 stdin,stdout,stderr = ssh.exec_command('esxcli network ip interface ipv4 get')    #執行的命令
11 w = stdout.read()     #拿到執行的結果 字符串格式
12 ssh.close()                   #關閉連接
13 obj = open('read_test','wb+')       #將執行的結果放入文件中保存
14 obj.write(w)      
15 obj.close()
16 
17 with open('read_test','rb') as txt_file:        #打開保存結果的文件
18     with open('test_excel.csv', 'wb') as excl_file:     #打開一個新文件保存
19         spamwriter = csv.writer(excl_file,dialect='excel')    #創建excel格式的文件對象
20         for line in txt_file.readlines():        #讀取結果文件的每一行
21             re = line.split()                            #按照空格分割將每行轉為列表
22             spamwriter.writerow(re)            #寫入到文件當中
結果存入excel表格

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM