выход самого переключателя ниже того, чего я пытаюсь достичь.
Порт
Имя
СтатусVlan
Дуплекс
Скорость
Тип
Fa0/1
ДАННЫЕ ПК
подключено
1
a-полное
a -100
10/100BaseTX
Fa0/2ДАННЫЕ ПК
не подключаются
1
авто
авто
10/100BaseTX
Fa0/3< /td>
отключено
1
авто
авто
10/100BaseTX
Fa0/ 4
подключено
1
полный
a-100
10/100BaseTX
Fa0/5
KRONOS
не подключается
1
авто
авто
10/100BaseTX
Fa0/6
KRONOS
не подключается
1
авто
авто
10/100BaseTX
в настоящее время у меня есть две проблемы
- если ячейка имени пусто в любой строке, все остальные ячейки сдвинуты влево. (например: Fa0/3 и Fa0/4)
- если в ячейке имени есть два или более слов с пробелами, каждое слово заполняет ячейку справа, что делает данные непригодными для использования.( Например: Fa0/1 и Fa0/2)
Порт
Имя
Статус
Vlan
Дуплекс
Скорость
Тип
Fa0/1
ПК
ДАННЫЕ
подключены
1
полный
a-100
Fa0/2
ПК
ДАННЫЕ
не подключаются
1
автоавто
Fa0/3
отключено
1
авто
авто
10/100BaseTX
nan
Fa0/4
подключен
1
полный
a-100
< td>10/100BaseTX
nan
Fa0/5
KRONOS
не подключается
1
авто
авто
10/100BaseTX
Fa0/6< /td>
KRONOS
не подключается
1
авто
авто
10/100BaseTX
в настоящее время у меня есть две проблемы.
- если ячейка имени пуста в любой строке, все остальные ячейки смещаются в левый. (например: Fa0/3 и Fa0/4)
- если в ячейке имени есть два или более слов с пробелами, каждое слово заполняет ячейку справа, что делает данные непригодными для использования.( Например: Fa0/1 и Fa0/2)
def get_ip_address():
ip_address_request = input("Please enter the IP address of the device: ")
return ip_address_request
ip_address = get_ip_address()
switch = {
"device_type":"cisco_ios",
"ip": ip_address,
'username': 'redacted',
'password': 'redacted',
}
# Establish SSH connection to the switch
net_connect = ConnectHandler(**switch)
prompt = net_connect.find_prompt()
hostname = prompt[:-1]
# send the show interfaces command and retrieve the output
version = net_connect.send_command("show version | inc uptime")
output = net_connect.send_command("Show interfaces", read_timeout=120, use_textfsm=True)
status = net_connect.send_command("Show interface status", use_textfsm=True)
# Close the ssh connection
net_connect.disconnect()
interfaces = []
lines = output.splitlines()
interface_regex = re.compile(r"(\S+\d+)\s+is")
last_input_regex = re.compile(r"Last input (\S+),")
for i in range(len(lines)):
line = lines
if interface_regex.search(line):
interface_match = interface_regex.search(line)
interface = interface_match.group(1)
for j in range(i, len(lines)):
if last_input_regex.search(lines[j]):
last_input_match = last_input_regex.search(lines[j])
last_input = last_input_match.group(1)
interfaces.append((interface, last_input))
break
sum_status = []
lines = status.strip().split('\n')
headers = lines[0].split()
values = lines[0].split()
entry = {}
for i, header in enumerate(headers):
if i < len(values):
entry[header] = values
sum_status.append(entry)
for line in lines[1:]:
values = line.split()
entry = {}
for i, header in enumerate(headers):
if i < len(values):
entry[header] = values
sum_status.append(entry)
interfaces_df = pd.DataFrame(interfaces, columns=['Interface', 'Last Input'])
status_df = pd.DataFrame(sum_status)
df = pd.concat([interfaces_df, status_df], axis=1)
filtered_df = df[~df['Interface'].str.contains('Vlan')]
filtered_df.reset_index(inplace=True, drop=True)
pd.set_option('display.max_colwidth', None)
filtered_df.loc[:, 'Name'] = filtered_df['Name'].fillna('')
column_widths = {'Interface': 20, 'Last Input': 12, 'Port': 8, 'Name': 20, 'Status': 12, 'Vlan': 8, 'Duplex': 10, 'Speed': 14, 'Type': 12}
pd.set_option('display.max_colwidth', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.colheader_justify', 'left')
formatted_df = filtered_df.copy()
for col in filtered_df.columns:
formatted_df[col] = formatted_df[col].apply(lambda x: str(x).ljust(column_widths[col]))
print(formatted_df.to_string(index=False))
Подробнее здесь: https://stackoverflow.com/questions/781 ... ther-cells