zoukankan      html  css  js  c++  java
  • 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表格
  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/chenchao1990/p/5110763.html
Copyright © 2011-2022 走看看