鱼C论坛

 找回密码
 立即注册
查看: 1264|回复: 1

求大神解惑。

[复制链接]
发表于 2022-1-27 15:16:07 | 显示全部楼层 |阅读模式
10鱼币
最近在学习自动化运维,然后写了一段代码,运行没问题,但是结果有问题,代码如下:
import shutil
import pexpect
import sys
import datetime
import os
import pymssql
# 今天的日期
today = datetime.date.today().strftime('%Y-%m-%d')
path = "/root/xunjian/" + today
if os.path.exists(path):
    shutil.rmtree(path)  # 递归删除文件夹下的所有子文件夹和子文件

os.mkdir(path, 777)


def switch(name, ip, passwd):
    try:
        name1 = "----More----"  # 模拟交换机出现的翻译提示
        child = pexpect.spawn('telnet %s' % ip)
        fout = open(
            '/root/xunjian/' + today + '/' + '%s-%s.txt' %
            (name, ip), 'wb+')
        child.logfile = fout
        child.expect('Username:', timeout=5)  # 提示用户登录,输入账号
        child.sendline("admin")
        child.expect('(?i)ssword:', timeout=5)  # 提示输入密码
        child.sendline("%s" % passwd)
        child.expect('<%s>' % name)
        child.sendline("display cpu-usage")  # 查看cpu状态
        child.expect('<%s>' % name)
        child.sendline("display memory")  # 查看内存状态
        child.expect('<%s>' % name)
        child.sendline("display environment")  # 查看运行温度
        child.expect('<%s>' % name)
        child.sendline("display fan")  # 查看风扇状态
        child.expect('<%s>' % name)
        child.sendline("display power")  # 查看电源状态
        child.expect('<%s>' % name)
        child.sendline("display ip routing-table")  # 路由表
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("display interface brief")  # 端口状态
                break
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("dis  version")  # 版本,为了看运行时间
                break
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("display log")  # 日志,日志较多,循环100个空格,怕输出不全。
                break
        for i in range(100):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("quit")
                break
    except BaseException:
        pass


host = 'localhost'  # 连接数据库,抓取数据库内的信息,交换机的名字、IP、密码
port = 1433
user = 'sa'
pwd = 'Zhonglang@159'
db = 'test'
connect = pymssql.connect(
    host=host,
    port=port,
    user=user,
    password=pwd,
    database=db,
    charset="utf8")
cur = connect.cursor()
sqls = "select * from [dbo].[test]"
cur.execute(sqls)
listall = cur.fetchall()  # SQL输出内容导成列表
for line in listall:
    switch(line[0], line[1], line[2])
connect.commit()
connect.close()

运行结果如下:
[root@localhost 2022-01-27]# cat stackB-10.1.1.3.txt
Trying 10.1.1.3...
Connected to 10.1.1.3.
Escape character is '^]'.

Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet.

Login authentication


Username:admin
admin
Password:123@123@123

Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 1.
      The current login time is 2022-01-27 14:19:04+00:00.
<stackB>display cpu-usage
display cpu-usage
CPU Usage Stat. Cycle: 60 (Second)
CPU Usage            : 76% Max: 96%
CPU Usage Stat. Time : 2022-01-27  14:19:04
CPU utilization for five seconds: 76%: one minute: 76%: five minutes: 76%
Max CPU Usage Stat. Time : 2021-12-12 09:26:13.

TaskName             CPU  Runtime(CPU Tick High/Tick Low)  Task Explanation
AGNT                 45%         1/97d843a0       AGNTSNMP agent task           
VIDL                 24%         0/d693a3fe       DOPRA IDLE                    
OS                   19%         0/a9df8c7f       Operation System              
l2sy                  5%         0/3152a5e0       l2sync                        
SFPT                  3%         0/22921900       SFPT Timer                    
FTS                   2%         0/1502b920       FTS                           
IFPD                  1%         0/ aba9500       IFPD Ifnet Product Adapter   
TICK                  1%         0/ b06e040                                    
AAA                   0%         0/       0       AAA  Authen Account Authorize
ACL                   0%         0/  2625a0       ACL Access Control List      
ADPT                  0%         0/       0       ADPT Adapter                  
AGENT_CAPWAP          0%         0/       0       AGENT_CAPWAP                  
AGENT_WLAN            0%         0/       0       AGENT_WLAN                    
AGT6                  0%         0/       0       AGT6SNMP AGT6 task            
ALM                   0%         0/       0       ALM  Alarm Management         
ALS                   0%         0/  2625a0       ALS  Loss of Signal           
AM                    0%         0/ 23c3460       AM   Address Management      
  ---- More ----[root@localhost 2022-01-27]#

到了More这里就没下文了。。

也就是说只执行了display cpu-usage这个命令,然后后面的命令都没有执行了。。不知道哪里出现了问题,求解答。谢谢。!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-27 15:27:06 | 显示全部楼层
本帖最后由 甜蜜难在 于 2022-1-27 15:28 编辑

如果我在输入密码后面再手动加入一句输入密码,代码如下:
import shutil
import pexpect
import sys
import datetime
import os
import pymssql
# 今天的日期
today = datetime.date.today().strftime('%Y-%m-%d')
path = "/root/xunjian/" + today
if os.path.exists(path):
    shutil.rmtree(path)  # 递归删除文件夹下的所有子文件夹和子文件

os.mkdir(path, 777)


def switch(name, ip, passwd):
    try:
        name1 = "----More----"  # 模拟交换机出现的翻页提示
        child = pexpect.spawn('telnet %s' % ip)
        fout = open(
            '/root/xunjian/' + today + '/' + '%s-%s.txt' %
            (name, ip), 'wb+')
        child.logfile = fout
        child.expect('Username:', timeout=5)  # 提示用户登录,输入账号
        child.sendline("admin")
        child.expect('(?i)ssword:', timeout=5)  # 提示输入密码
        child.sendline("123@123@123")
        child.sendline("%s" % passwd)
        child.expect('<%s>' % name)
        child.sendline("display cpu-usage")  # 查看cpu状态
        child.expect('<%s>' % name)
        child.sendline("display memory")  # 查看内存状态
        child.expect('<%s>' % name)
        child.sendline("display environment")  # 查看运行温度
        child.expect('<%s>' % name)
        child.sendline("display fan")  # 查看风扇状态
        child.expect('<%s>' % name)
        child.sendline("display power")  # 查看电源状态
        child.expect('<%s>' % name)
        child.sendline("display ip routing-table")  # 路由表
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("display interface brief")  # 端口状态
                break
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("dis  version")  # 版本,为了看运行时间
                break
        for i in range(10):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("display log")  # 日志,日志较多,循环100个空格,怕输出不全。
                break
        for i in range(100):
            index = child.expect([name1, '<%s>' % name])
            if index == 0:
                child.send(" ")
            else:
                child.sendline("quit")
                break
    except BaseException:
        pass


host = 'localhost'  # 连接数据库,抓取数据库内的信息,交换机的名字、IP、密码
port = 1433
user = 'sa'
pwd = 'Zhonglang@159'
db = 'test'
connect = pymssql.connect(
    host=host,
    port=port,
    user=user,
    password=pwd,
    database=db,
    charset="utf8")
cur = connect.cursor()
sqls = "select * from [dbo].[test]"
cur.execute(sqls)
listall = cur.fetchall()  # SQL输出内容导成列表
for line in listall:
    switch(line[0], line[1], line[2])
connect.commit()
connect.close()

那么执行结果就会很多,但是命令执行那里还是存在问题。。
[root@localhost 2022-01-27]# cat stackB-10.1.1.3.txt
Trying 10.1.1.3...
Connected to 10.1.1.3.
Escape character is '^]'.

Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet.

Login authentication


Username:admin
admin
Password:123@123@123

Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 1.
      The current login time is 2022-01-27 14:19:04+00:00.
<stackB>display cpu-usage
display cpu-usage
CPU Usage Stat. Cycle: 60 (Second)
CPU Usage            : 76% Max: 96%
CPU Usage Stat. Time : 2022-01-27  14:19:04
CPU utilization for five seconds: 76%: one minute: 76%: five minutes: 76%
Max CPU Usage Stat. Time : 2021-12-12 09:26:13.

TaskName             CPU  Runtime(CPU Tick High/Tick Low)  Task Explanation
AGNT                 45%         1/97d843a0       AGNTSNMP agent task           
VIDL                 24%         0/d693a3fe       DOPRA IDLE                    
OS                   19%         0/a9df8c7f       Operation System              
l2sy                  5%         0/3152a5e0       l2sync                        
SFPT                  3%         0/22921900       SFPT Timer                    
FTS                   2%         0/1502b920       FTS                           
IFPD                  1%         0/ aba9500       IFPD Ifnet Product Adapter   
TICK                  1%         0/ b06e040                                    
AAA                   0%         0/       0       AAA  Authen Account Authorize
ACL                   0%         0/  2625a0       ACL Access Control List      
ADPT                  0%         0/       0       ADPT Adapter                  
AGENT_CAPWAP          0%         0/       0       AGENT_CAPWAP                  
AGENT_WLAN            0%         0/       0       AGENT_WLAN                    
AGT6                  0%         0/       0       AGT6SNMP AGT6 task            
ALM                   0%         0/       0       ALM  Alarm Management         
ALS                   0%         0/  2625a0       ALS  Loss of Signal           
AM                    0%         0/ 23c3460       AM   Address Management      
  ---- More ----[root@localhost 2022-01-27]# ^C
[root@localhost 2022-01-27]# cat stackB-10.1.1.3.txt
Trying 10.1.1.3...
Connected to 10.1.1.3.
Escape character is '^]'.

Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet.

Login authentication


Username:admin
admin
Password:123@123@123

Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 1.
      The current login time is 2022-01-27 14:19:04+00:00.
<stackB>display cpu-usage
display cpu-usage
CPU Usage Stat. Cycle: 60 (Second)
CPU Usage            : 76% Max: 96%
CPU Usage Stat. Time : 2022-01-27  14:19:04
CPU utilization for five seconds: 76%: one minute: 76%: five minutes: 76%
Max CPU Usage Stat. Time : 2021-12-12 09:26:13.

TaskName             CPU  Runtime(CPU Tick High/Tick Low)  Task Explanation
AGNT                 45%         1/97d843a0       AGNTSNMP agent task           
VIDL                 24%         0/d693a3fe       DOPRA IDLE                    
OS                   19%         0/a9df8c7f       Operation System              
l2sy                  5%         0/3152a5e0       l2sync                        
SFPT                  3%         0/22921900       SFPT Timer                    
FTS                   2%         0/1502b920       FTS                           
IFPD                  1%         0/ aba9500       IFPD Ifnet Product Adapter   
TICK                  1%         0/ b06e040                                    
AAA                   0%         0/       0       AAA  Authen Account Authorize
ACL                   0%         0/  2625a0       ACL Access Control List      
ADPT                  0%         0/       0       ADPT Adapter                  
AGENT_CAPWAP          0%         0/       0       AGENT_CAPWAP                  
AGENT_WLAN            0%         0/       0       AGENT_WLAN                    
AGT6                  0%         0/       0       AGT6SNMP AGT6 task            
ALM                   0%         0/       0       ALM  Alarm Management         
ALS                   0%         0/  2625a0       ALS  Loss of Signal           
AM                    0%         0/ 23c3460       AM   Address Management      
  ---- More ----[root@localhost 2022-01-27]#
[root@localhost 2022-01-27]# rm -rf stackB-10.1.1.3.txt
[root@localhost 2022-01-27]# cd ..
[root@localhost xunjian]# cd ..
[root@localhost ~]# rm -rf test.py
[root@localhost ~]# rz
rz waiting to receive.
?a? zmodem ′???£  °′ Ctrl+C ???£
Transferring test.py...
  100%       3 KB    3 KB/s 00:00:01       0 Errors

?[root@localhost ~]# python test.py
[root@localhost ~]# cd xunjian
[root@localhost xunjian]# cd 2022-01-27/
[root@localhost 2022-01-27]# ls
stackB-10.1.1.3.txt
[root@localhost 2022-01-27]# cat stackB-10.1.1.3.txt
Trying 10.1.1.3...
Connected to 10.1.1.3.
Escape character is '^]'.

Warning: Telnet is not a secure protocol, and it is recommended to use Stelnet.

Login authentication


Username:admin
admin
Password:123@123@123
123@123@123

Info: The max number of VTY users is 20, and the number
      of current VTY users on line is 1.
      The current login time is 2022-01-27 14:30:15+00:00.
<stackB>display cpu-usage
123@123@123
        ^
Error: Unrecognized command found at '^' position.
<stackB>display memory
display cpu-usage

CPU Usage Stat. Cycle: 60 (Second)
CPU Usage            : 79% Max: 96%
CPU Usage Stat. Time : 2022-01-27  14:30:15
CPU utilization for five seconds: 79%: one minute: 79%: five minutes: 79%
Max CPU Usage Stat. Time : 2021-12-12 09:26:13.

TaskName             CPU  Runtime(CPU Tick High/Tick Low)  Task Explanation
OS                   21%         0/bbc12f7e       Operation System              
VIDL                 21%         0/bbc12f7e       DOPRA IDLE                    
FTS                  15%         0/8a6e89a0       FTS                           
SOCK                 12%         0/718bfe40       SOCKPacket schedule and
                                                  process                     
AGNT                  6%         0/3c0d3ae0       AGNTSNMP agent task           
VPR                   6%         0/3c336080       VPR VP Receive               
L3I4                  4%         0/245bdc80       L3I4 LPU Manage IPv4 unicast
                                                  FDB                          
SFPT                  3%         0/1b9130a0       SFPT Timer                    
rx_2                  3%         0/21f98280       rx_2                          
IT59                  2%         0/178b38c0       IT59                          
rx_7                  2%         0/125413e0       rx_7                          
ARP                   1%         0/ e7441a0       ARP                           
IFPD                  1%         0/ b06e040       IFPD Ifnet Product Adapter   
IPCR                  1%         0/ aba9500       IPCR InterPro Communicate
                                                  Receive                     
                                          
<stackB>display environment
isplay memory

        ^
Error: Unrecognized command found at '^' position.
<stackB>display fan
display environment

                ^
Error: Unrecognized command found at '^' position.
<stackB>display power
display fan

-------------------------------------------------------------------------
Slot  FanID   Online    Status    Speed     Mode     Airflow            
-------------------------------------------------------------------------
0     1       Present   Normal    35%       Auto     Side-to-Side
0     2       Present   Normal    35%       Auto     Side-to-Side
0     3       Present   Normal    35%       Auto     Side-to-Side
1     1       Present   Normal    35%       Auto     Side-to-Side
1     2       Present   Normal    35%       Auto     Side-to-Side
1     3       Present   Normal    35%       Auto     Side-to-Side
<stackB>display ip routing-table
display power

Info: There is no power information.
<stackB>display interface brief
display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 103      Routes : 103      

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        0.0.0.0/0   Static  60   0          RD   10.1.1.1        Vlanif100
       10.1.1.0/24  Direct  0    0           D   10.1.1.3        Vlanif100
       10.1.1.3/32  Direct  0    0           D   127.0.0.1       Vlanif100
   10.237.248.0/24  Direct  0    0           D   10.237.248.1    Vlanif300
   10.237.248.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
     172.16.1.0/24  Direct  0    0           D   172.16.1.254    Vlanif300
   172.16.1.254/32  Direct  0    0           D   127.0.0.1       Vlanif300
     172.16.2.0/24  Direct  0    0           D   172.16.2.1      Vlanif300
     172.16.2.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
     172.16.3.0/24  Direct  0    0           D   172.16.3.1      Vlanif300
     172.16.3.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
     172.17.1.0/24  Direct  0    0           D   172.17.1.1      Vlanif300
     172.17.1.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
     172.17.2.0/24  Direct  0    0           D   172.17.2.1      Vlanif300
     172.17.2.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
     172.17.3.0/24  Direct  0    0           D   172.17.3.1      Vlanif300
     172.17.3.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
    192.168.0.0/24  Direct  0    0           D   192.168.0.1     Vlanif21
    192.168.0.1/32  Direct  0    0           D   127.0.0.1       Vlanif21
    192.168.1.0/24  Direct  0    0           D   192.168.1.1     Vlanif300
    192.168.1.1/32  Direct  0    0           D   127.0.0.1       Vlanif300
    192.168.2.0/24  Direct  0    0           D   192.168.2.1     Vlanif300
                                          
<stackB>dis  version
isplay interface brief
        ^
Error: Unrecognized command found at '^' position.
<stackB>ddisplay log
is  version
Huawei Versatile Routing Platform Software
VRP (R) software, Version 5.170 (S6720 V200R011C10SPC600)
Copyright (C) 2000-2018 HUAWEI TECH Co., Ltd.
HUAWEI S6720S-26Q-LI-24S-AC Routing Switch uptime is 6 weeks, 4 days, 8 hours, 13 minutes

ES5D2S26Q005 0(Master)  : uptime is 6 weeks, 4 days, 8 hours, 11 minutes
DDR             Memory Size : 1024  M bytes
FLASH Total     Memory Size : 512   M bytes
FLASH Available Memory Size : 360   M bytes
Pcb           Version   : VER.A
BootROM       Version   : 020b.0001
BootLoad      Version   : 020b.0a05
CPLD          Version   : 0105
Software      Version   : VRP (R) Software, Version 5.170 (V200R011C10SPC600)
FLASH         Version   : 0x0

ES5D2S26Q005 1(Standby)  : uptime is 6 weeks, 4 days, 7 hours, 56 minutes
DDR             Memory Size : 1024  M bytes
FLASH Total     Memory Size : 512   M bytes
FLASH Available Memory Size : 360   M bytes
Pcb           Version   : VER.A
BootROM       Version   : 020b.0001
BootLoad      Version   : 020b.0a05
CPLD          Version   : 0105
                                          
<stackB>quit

就是在一条命令下面紧接着又是一条命令,或者就是命令直接变成了两截。。很奇怪。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 04:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表