簡體   English   中英

Python IP輸出(打印)無法正常工作

[英]Python IP output (print) is not working correctly

我是Python新手。 無法使我的第一個腳本正常工作。 我想要的是:

  1. 從xls獲取IP
  2. 打印該IP
  3. 遠程登錄到IP
  4. 授權
  5. 顯示運行\\ n,退出\\ n
  6. 將輸出寫入名為“ IP”的文件
  7. 從xls獲取下一個IP

該XLS包含約6k主機。 我對制作多線程有一些想法,但是對此一無所知。 會盡快嘗試。

問題是,我在控制台中無法獲得良好的“打印(主機)”輸出。 腳本運行良好,但是我每次看到的第一個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 16536 Apr 8 07:38 10.1.115.105

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

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

我猜問題出在“主機= 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

正如您正確假設的那樣,問題出在host = ip_addr_list[0] ip_addr_list是元素的列表(數組), [0]是元素在列表中的索引。 因此,無論循環運行多少次, host始終是ip_addr_list第一個元素。 另外,還有更多的“ pythonic”方式遍歷列表。 這將是:

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定義移出循環。 它們始終是相同的,因此無需每次都珍惜價值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM