Python IP输出(打印)无法正常工作

时间:2015-04-08 11:41:29

标签: python

我是Python的新手。无法让我的第一个脚本运行良好。 我想要的是什么:

  1. 从xls获取IP
  2. 打印IP
  3. telnet to IP
  4. 授权
  5. show run \ n,退出\ n
  6. 将输出写入名为" IP"
  7. 的文件
  8. 从xls获取下一个IP
  9. 此XLS包含大约6k个主机。我对制作多线程有一些想法,但对此却一无所知。将尽快尝试。

    问题是,我无法获得好处" print(host)"在控制台输出。脚本工作得很好,但每次第一次IP时都会看到IP的正确名称。

    IP列表:

    10.1.115.105 10.1.115.108 10.1.115.143 等

    我在聊天中看到

    [root @ localhost python] #python3.3 telnet_bck.py

    10.1.115.105

    10.1.115.105

    10.1.115.105

    但文件正确保存

    -rw-r - r-- 1 root root 16536 Apr 8 07:38 10.1.115.105

    -rw-r - r-- 1 root root 16536 Apr 8 07:38 10.1.115.108

    -rw-r - r-- 1 root root 16536 Apr 8 06:53 10.1.115.243

    我猜问题就在附近" host = ip_addr_list [0]"但无法理解在哪里。伙计们,请帮忙。任何帮助将不胜感激。

    import xlrd                     #Excel module
    import re                       #Parser module
    import os                       
    import glob                     
    import sys                      
    import telnetlib                #telnet module
    rb = xlrd.open_workbook('/samba/allaccess/test.xlsx')
    sheet = rb.sheet_by_name('IPs')
    num_rows = sheet.nrows
    num_cols = sheet.ncols
    ip_addr_list = [sheet.row_values(rawnum)[0] for rawnum in range(sheet.nrows)]
    num_ips = 0
    while num_ips < num_rows:
        host = ip_addr_list[0]
        port = "23"
        user = "test"
        password = "test"
        print(host)
        tn = telnetlib.Telnet(host,port)
        tn.read_until(b"ser name:")
        tn.write(user.encode('ascii')+b"\n")
        tn.read_until(b"assword:")
        tn.write(password.encode('ascii')+b"\n")
        tn.write(b"sh ru"+b"\n")
        tn.write(b"exit"+b"\n")
        str_all = tn.read_all()
        re.sub("^\s+|\n|\r|\s+$", '', str_all.decode())
        file = open('{0}'.format(ip_addr_list[num_ips]),"wb")
        file.write(str_all)
        num_ips += 1
    

1 个答案:

答案 0 :(得分:1)

正如您所正确假设的那样,问题正好在host = ip_addr_list[0]中。 ip_addr_list是元素的列表(数组),[0]是列表中元素的索引。因此,无论您的循环运行多少次,host将始终是ip_addr_list的第一个元素。 此外,还有更多的&#34; pythonic&#34;迭代列表的方式。它将是:

for host in ip_addr_list:
    port = "23"
    user = "test"
    password = "test"
    print(host)
    tn = telnetlib.Telnet(host,port)
    tn.read_until(b"ser name:")
    tn.write(user.encode('ascii')+b"\n")
    tn.read_until(b"assword:")
    tn.write(password.encode('ascii')+b"\n")
    tn.write(b"sh ru"+b"\n")
    tn.write(b"exit"+b"\n")
    str_all = tn.read_all()
    re.sub("^\s+|\n|\r|\s+$", '', str_all.decode())
    file = open('{0}'.format(host),"wb")
    file.write(str_all)
    num_ips += 1

这种方式在循环的每次迭代中,host将包含来自ip_addr_list的下一个元素。 您也可以考虑将port, userpassword定义移出循环。它们总是一样的,所以每次有价值时都不需要asigne。