【问题标题】:Trying to get port number (regex)尝试获取端口号(正则表达式)
【发布时间】:2019-12-18 07:06:03
【问题描述】:

我从一个 PDU 通过 telnet (telnetlib) 获得了一个输出,我试图从每个服务器名的输出中获取端口号。 我设法使用(?!E000)[A-Z]([^\sPDU]+)\d 获取端口名称。 我很乐意帮助您使用循环和正则表达式获取每个服务器的端口号。 到目前为止,我已经有了这个正则表达式,用于输出端口号 [^E000][^A-Z]( \d)|[^E000][^A-Z](\d\d)

这是我目前得到的:

ports = "1","2","3","4"
PDUS = "192.168.10.12","192.168.10.11"
password = 'password'
user = 'apc'

  for PDU in PDUS:
            for port in ports:
                print "Connecting to"+" "+PDU+" "+"Telnet"
                tn = telnetlib.Telnet(PDU)

                print "Logging in"
                tn.read_until('User Name :')
                tn.write(user + b'\r\n')
                if password:
                    tn.read_until('Password  :')
                    tn.write(password + b'\r\n')

                    print "Checking port Status"
                    tn.write('olStatus All\n')
                    tn.write('exit\n')

                print (output)
                output = (tn.read_all())
                servername = re.search(r'(?!E000)[A-Z]([^\sPDU]+)\d', output, re.MULTILINE)
                server = re.search(r'server01|server02|server03', output)
                if servername:
                    print servername.group(0)
                    print server.group(0)

输出是:

Schneider Electric                      Network Management Card AOS      v6.4.4
(c) Copyright 2016 All Rights Reserved  RPDU 2g APP                      v6.4.4
-------------------------------------------------------------------------------
Name      : PDU2                                      Date : 08/11/2019
Contact   : Unknown                                   Time : 03:17:18
Location  : Unknown                                   User : Super User
Up Time   : 4 Days 0 Hours 7 Minutes                  Stat : P+ N4+ N6+ A+


Type ? for command listing
Use tcpip command for IP address(-i), subnet(-s), and gateway(-g)

apc>olStatus All  
E000: Success  
 1: Empty: On  
 2: server01: On  
 3: server02: On  
 4: server03: On  
 5: server04: On  
 6: server05: On  
 7: server06: On  
 8: server07: On  
 9: Empty: On  
10: server08: On  
11: server09: On  
12: server10: On  
13: server11: On  
14: server12: On  
15: server13: On  
16: server14: On  
17: Empty: On  
18: server15: On  
19: server16: On  
20: server17: On  
21: server18: On  
22: server19: On  
23: serverspare01: On  
24: serverspare02: On  

apc>exit

这是使用 python 2.7 的服务器,我尝试使用多个正则表达式但找不到正确的。

对于所有端口,我需要在一个变量中获得“2”,在另一个变量中获得“server01”。

【问题讨论】:

    标签: python python-2.7 pysnmp telnetlib


    【解决方案1】:

    你可以试试下面的代码:

    string= "2: server01: On"
    print re.split(r":\s+", string)  #['2', 'server01', 'On']
    
    
    :     # Splits on it
    \s+   # Match one or more whitespace characters
    

    了解更多关于正则表达式的信息:

    https://www.regular-expressions.info/

    【讨论】:

    • 这不是我上面提到的输出。输出应该是“字符串”而不是你写的字符串。
    【解决方案2】:

    我使用了 PySaad 的正则表达式,但使用了“re.sub”。
    servername = re.sub(r"\s+", "", servername)
    请参阅代码中的 ==>。

    ports = "1","2","3","4"
    PDUS = "192.168.10.12","192.168.10.11"
    password = 'password'
    user = 'apc'
    
    for PDU in PDUS:
            for port in ports:
                print "Connecting to"+" "+PDU+" "+"Telnet"
                tn = telnetlib.Telnet(PDU)
    
                print "Logging in"
                tn.read_until('User Name :')
                tn.write(user + b'\r\n')
                if password:
                    tn.read_until('Password  :')
                    tn.write(password + b'\r\n')
    
                    print "Checking port Status"
                    tn.write('olStatus All\n')
                    tn.write('exit\n')
    
                print (output)
                output = (tn.read_all())
                servername = re.search(r'(?!E000)[A-Z]([^\sPDU]+)\d', output, re.MULTILINE)
            ==> servername = re.sub(r"\s+", "", servername
                server = re.search(r'server01|server02|server03', output)
                if servername:
                    print servername.group(0)
                    print server.group(0)
    

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多