Python Forum
Help required to print MAC addresses - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Help required to print MAC addresses (/thread-8351.html)

Pages: 1 2 3 4 5 6


RE: Help required to print MAC addresses - buran - Feb-20-2018

please make the last print properly formatted...

print ('It took {:.2f} seconds'.format(exec_time)) #change exec_time to whatever name you use



RE: Help required to print MAC addresses - anna - Feb-21-2018

Thanks,

print ('It took {:.2f} seconds'.format(exec_time)) #change exec_time to whatever name you use
is to check execution time, and will not be there in final code. Just to calculate time to decide the number threads required to complete 1000+ devices.

I have made some changes in code, sending output to list and taking bport from list as parameter to next command, however I am missing something.

def mac2norm(mac):
    mac = mac.split(' ')
    return '{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac).upper()

#header = ('mac address', 'bport', 'vlan')
#print('{:^17} {:^5}  {:^4}'.format(*header))
#print('='*33)
MyList = []
for line in output.decode('utf-8').split('\n')[4:]:
    line = line.split('|')
    if len(line) == 8:
        mac, bport, vlan = map(lambda x: x.strip(), line[:3])
        mac_address = mac2norm(mac)
        #print('{} {} {} {}'.format(host,mac_address, bport, vlan))
        MyList = host,mac_address, bport, vlan
        #print('{} {} {} {}'.format(*MyList))
        dslam_bport = (MyList[3])
        print(dslam_bport)
        session.write("bportr ".encode('ascii') + dslam_bport +b"\r")
        portoutput = session.read_until("MCR64A >".encode('ascii'), timeout )
        for line in portoutput.decode('utf-8').split('\n'):
            if 'Port:' in line:
                raw_port = line.split(':')
                port = line[1]
                MyList.append(port)
                print('{} {} {} {}'.format(host,mac_address, bport, vlan, port))
facing below error

Error:
Starting Client... Connecting... Sending Commands... Reading... 3612 Traceback (most recent call last): File "ecicollector-1.py", line 52, in <module> session.write("bportr ".encode('ascii') + dslam_bport +b"\r") File "/usr/lib64/python2.7/telnetlib.py", line 279, in write if IAC in buffer: UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)



RE: Help required to print MAC addresses - anna - Feb-21-2018

def mac2norm(mac):
    mac = mac.split(' ')
    return '{:0>2}:{:0>2}:{:0>2}:{:0>2}:{:0>2}'.format(*mac).upper()

#header = ('mac address', 'bport', 'vlan')
#print('{:^17} {:^5}  {:^4}'.format(*header))
#print('='*33)
MyList = []
for line in output.decode('utf-8').split('\n')[4:]:
    line = line.split('|')
    if len(line) == 8:
        mac, bport, vlan = map(lambda x: x.strip(), line[:3])
        mac_address = mac2norm(mac)
        #print('{} {} {} {}'.format(host,mac_address, bport, vlan))
        MyList = host,mac_address, bport, vlan
        #print('{} {} {} {}'.format(*MyList))
        dslam_bport = MyList[2]
        print(type(dslam_bport))
        command = "bportr " +dslam_bport
        #print(command)
        session.write((command +"\r").encode('ascii'))
        portoutput = session.read_until("MCR64A >".encode('ascii'), timeout )
        for line in portoutput.decode('utf-8').split('\n'):
            if 'Port:' in line:
                raw_port = line.replace(' ','').split(':')
                port = raw_port[1]
                print(port)
                MyList.append(port)
able to print Port details,
Output:
Starting Client... Connecting... Sending Commands... Reading... <type 'unicode'> [b]13[/b]
MyList is List, still showing tuple error

Error:
Traceback (most recent call last): File "ecicollector-1.py", line 62, in <module> MyList.append(port) AttributeError: 'tuple' object has no attribute 'append'



RE: Help required to print MAC addresses - anna - Feb-21-2018

MyList = []
for line in output.decode('utf-8').split('\n')[4:]:
    line = line.split('|')
    if len(line) == 8:
        mac, bport, vlan = map(lambda x: x.strip(), line[:3])
        mac_address = mac2norm(mac)
        #print('{} {} {} {}'.format(host,mac_address, bport, vlan))
        MyList = host,mac_address, bport, vlan
        #print('{} {} {} {}'.format(*MyList))
        dslam_bport = MyList[2]
        #print(type(dslam_bport))
        command = "bportr " +dslam_bport
        #print(command)
        session.write((command +"\r").encode('ascii'))
        portoutput = session.read_until("MCR64A >".encode('ascii'), timeout )
        for line in portoutput.decode('utf-8').split('\n'):
            if 'Port:' in line:
                raw_port = line.replace(' ','').split(':')
                port = raw_port[1]
                #print(port)
                MyList = list()
                MyList.append(port)
                #MyList += ((port.decode('utf-8')))
                #data = MyList.append(port)
                #MyList.append(port)
                print('{} {} {} {} {}'.format(host,mac_address, bport, vlan, port))
is this correct way?

Output:
10.117.1.84 E8:37:7A:9D:1A 1616 3612 13 10.117.1.84 54:B8:00:0A:49 1696 3612 53 10.117.1.84 B0:B2:DC:00:05 1730 3612 1 10.117.1.84 28:28:5D:ED:B4 1640 3612 25 10.117.1.84 00:17:7C:76:99 1622 3612 16 10.117.1.84 28:28:5D:94:78 1704 3612 57 10.117.1.84 48:EE:00:0C:95 1630 3612 20 10.117.1.84 48:EE:00:0C:BF 1628 3612 19 10.117.1.84 00:17:7C:80:7C 1732 3612 36 10.117.1.84 E8:CC:18:62:4B 1736 3612 8 10.117.1.84 00:17:7C:61:C2 1596 3612 3 10.117.1.84 00:25:5E:3F:E7 1716 3612 63 10.117.1.84 CC:5D:4E:26:E8 1706 3612 58 10.117.1.84 0C:D2:B5:5F:62 1632 3612 21 10.117.1.84 28:28:5D:F4:00 1680 3612 45 10.117.1.84 CC:5D:4E:26:E2 1698 3612 54 10.117.1.84 00:26:15:11:7A 1674 3612 42 10.117.1.84 0C:D2:B5:63:51 1710 3612 60



RE: Help required to print MAC addresses - buran - Feb-21-2018

why do you need MyList at all? you don't really use it. Not to mention that it is list, then tuple, then different list...
why do you use .encode('ascii') for strings that are ascii anyway?
why you introduce intermediate variables dslam_bport (you can just use bport) and raw_port (when you can just the slicing at the end of split() line?)


RE: Help required to print MAC addresses - anna - Feb-21-2018

Thanks Buran, let me work out on this.


RE: Help required to print MAC addresses - anna - Feb-22-2018

Hi Buran,

changed, let me know any this left for improvement?

for line in output.decode('utf-8').split('\n')[4:]:
           line = line.split('|')
           if len(line) == 8:
              mac, bport, vlan = map(lambda x: x.strip(), line[:3])
              mac_address = mac2norm(mac)
              MyList = host,mac_address, bport, vlan
              command = "bportr " +bport
              session.write((command +"\r").encode('ascii'))
              portoutput = session.read_until("MCR64A >".encode('ascii'), timeout )
              for line in portoutput.split('\n'):
                  if 'Port:' in line:
                      port = line.replace(' ','').split(':')[1]
                      MyList += (port,)
                      print('{} {} {} {} {}'.format(host,mac_address, bport, vlan, port))
working perfectly

tried with another device and output is perfect.

Output:
10.113.1.1 10:62:EB:66:E9 1746 3601 38 10.113.1.1 00:17:7C:6D:FF 1845 3601 20 10.113.1.1 90:8D:78:8B:49 1828 3601 28 10.113.1.1 00:00:0D:48:33 2094 357 34 10.113.1.1 6C:19:8F:5E:BA 1716 3601 24 10.113.1.1 80:26:89:CA:84 2119 3601 44 10.113.1.1 28:28:5D:BF:32 1891 3601 6 10.113.1.1 E8:37:7A:9D:16 1963 3601 16 10.113.1.1 28:28:5D:94:89 1949 3601 9 10.113.1.1 EC:22:80:C4:00 1798 3601 5 10.113.1.1 E4:6F:13:81:00 1969 3601 21 10.113.1.1 E4:6F:13:82:DE 2088 3401 2 10.113.1.1 00:00:0D:48:34 1989 3111 32 10.113.1.1 00:17:7C:7C:3E 1865 3601 31 10.113.1.1 48:EE:00:0C:98 1768 3601 52 10.113.1.1 54:B8:00:0A:41 1712 3601 18 10.113.1.1 00:17:7C:6E:00 2057 3132 10 10.113.1.1 0C:D2:B5:61:CE 1822 3601 15 10.113.1.1 EC:22:80:C4:00 1750 3601 3 10.113.1.1 00:17:7C:6D:C8 2109 3601 23 10.113.1.1 00:17:7C:75:A7 1947 3601 8 10.113.1.1 90:8D:78:84:5C 1983 3125 47 10.113.1.1 80:26:89:C8:EE 2137 3133 37 10.113.1.1 EC:43:F6:7B:22 2090 3401 42 10.113.1.1 E4:6F:13:88:4D 1961 3601 54 10.113.1.1 80:26:89:C7:6D 2133 3142 62 10.113.1.1 00:19:CB:B3:BF 1826 3601 27 10.113.1.1 E4:6F:13:81:00 2021 3601 39 10.113.1.1 00:17:7C:7C:3E 1770 3601 35 10.113.1.1 10:7B:EF:A6:22 1838 3601 53 10.113.1.1 00:17:7C:77:AC 2092 3601 63 10.113.1.1 0C:D2:B5:5E:B4 2116 3601 17



RE: Help required to print MAC addresses - wavic - Feb-22-2018

One more thing. You can align the values to the left or to the right if you know the max length of the value in letters. See my formatting for the mac address values.


RE: Help required to print MAC addresses - anna - Feb-22-2018

Sorry.. Wavic, not able to understand this. However i required this sequence for further processing, output with single space character to split that while inserting to MySQL.

Thanks.


RE: Help required to print MAC addresses - buran - Feb-22-2018

(Feb-22-2018, 07:27 AM)anna Wrote: changed, let me know any this left for improvement?

Already told you that you don't really use MyList, you just constantly overwrite it. Just remove lines 6 and 13, which don't serve any practical purpose.