Я программирую скрипт для настройки микротика через файл Python. Я могу подключиться к микротику через SSH, Telnet и mac-telnet, но я не могу отправить команду на микротик, вывод - процесс прерывается. Не могли бы вы помочь мне с нажатием команд в скрипте Python с помощью mac-telnet? Я тестировал функцию mactelnet в main.
Я также включаю сценарий.
Большое спасибо.
import sys, posix, time, md5, binascii, socket, select
import pexpect
import os
class LoginManager:
""" Class representing Microtic """
def __init__(self,hostIP,login,password):
self.host = hostIP
self.username = login
self.pwd = password
#telnet na mikrotik
def loginTelnet(self,login,password):
"""
Function to login to mikrotik via telnet
:param login:
:param password:
:return:
"""
import telnetlib
try:
host = '172.16.49.2'
port = 23
telnetcon = telnetlib.Telnet(host,port)
telnetcon = telnetlib.Telnet(host)
#user input
telnetcon.read_until(b"Login: ")
telnetcon.write(login.encode()+"\n")
#user password
telnetcon.read_until(b"Password: ")
telnetcon.write(password.encode()+b"\n")
time.sleep(10)
telnetcon.close()
'''
telnetcon.read_until()
telnetcon.read_all('Please press "Enter" to continue!'+"\n")
telnetcon.write('\013')
telnetcon.read_all('/ip address print')
'''
except:
print "Cannot connect to router via telnet"
#metoda na prihlasenie pomocou SSH
def loginSSH(self,login,password):
from pexpect import pxssh,spawn,expect
import getpass
try:
#self.login = login
#self.password = password
connect = pxssh.pxssh()
server = '172.16.49.2'
login = 'admin'
password = 'admin'
port = 22
connect.login(server,login,password)
commands = pxssh.spawn()
time.sleep(10)
connect.logout()
'''
commands.expect('Please press "Enter" to continue!')
commands.sendline('\013')
connect.sendline('/ip address print')
connect.prompt()
print connect.before
'''
except pxssh.ExceptionPxssh,e:
print "Error"
print str(e)
#router = RouterOS('172.16.49.2', 'admin', 'admin')
#router.loginTelnet('admin','admin')
#os.system("mactelnet -l -t 50 > mt.output 2>&1")
#zoznam devicov
deviceList = []
loadMacAddress = False
with open("mt.output", "r") as file:
for line in file:
if loadMacAddress:
macAddress = line.split()[1]
deviceList.append(macAddress)
else:
header = line.split()
if len(header)>1:
if "IP" in header[0] and "MAC-Address" in header[1]:
loadMacAddress = True
print deviceList
username = 'admin'
password = '""'
os.system('mactelnet {} -u {} -p {}'.format(deviceList[0], username, password))
os.system("interface print")
#print udajue[0][0]
Адриан
os.system()
запускает одну команду и возвращает результат, когда эта команда завершается — между одним вызовом и другим нет непрерывности. - person Charles Duffy   schedule 28.10.2017os.system()
для этого.subprocess.Popen()
— лучший инструмент для работы. - person Charles Duffy   schedule 28.10.2017subprocess
, чтобы запустить один процесс, которому принадлежит соединение, а затем отправить дальнейшие команды этому процессу. - person Charles Duffy   schedule 28.10.2017paramiko-expect
. - person Charles Duffy   schedule 28.10.2017