Найти - Пользователи
Полная версия: Чтение Telnet в файл
Начало » Python для новичков » Чтение Telnet в файл
1
crazyenimal
Приветствую!
Есть такая задача.
Подключиться по telnet к железке, прочесть поток, закрывающих символов в потоке нет, он просто идёт и всё. Закрыть соединение по достижении например минуты или 10 строк. забросить всё это в файл.

И так.
В документации есть пример.

import getpass
import telnetlib
HOST = "localhost"
user = input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(HOST)
tn.read_until(b"login: ")
tn.write(user.encode('ascii') + b"\n")
if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")
tn.write(b"ls\n")
tn.write(b"exit\n")
print(tn.read_all().decode('ascii'))

И всё вроде хорошо работает. но есть несколько проблем.
1. В моём случае Telnet server никаких комманд не примет. он только отдаёт инфу (это АТС которая по телнету выдаёт лог звонков)
2. при попытке записать в файл“f.write(tn.read_all())”, мне питон говорит, что не может он положить байтовые данные в строку и всё тут. а при попытке сделать decode он говорить что метод ascii или utf8 не очень-то хорошо декодится из байта.

Может кто сможет подсказать как прочитьтать из телнета данные пока они идут, и как только они закончились, ну например в течении 10 секунд ничего не поступило, то оборвать коннект и записать всё это в файл ????

Буду очень благодарен!
Mouse
открыть файл в байтовом режиме??
crazyenimal
Mouse
открыть файл в байтовом режиме??
Как выяснилось, новый питон ещё та кривятина. Проще оказалось использовать метод read_very_eager(). А запускать сам скрипт на линуксе. Он и файл создаёт и кладёт в него всю инфу так как я хочу.
doza_and
crazyenimal
новый питон ещё та кривятина
crazyenimal
. А запускать сам скрипт на линуксе
Думаю вы горячитесь.
Воспроизведите ошибку законсервировав ответ например при помощи Pickle. Выкладывайте сюда, вместе с вашей писалкой. Тогда вам подскажут что не так, поскольку ошибку будет легко воспроизвести.
crazyenimal
doza_and
Выкладывайте сюда, вместе с вашей писалкой.
import time
import telnetlib
HOST = "***.***.***.***"
PORT = "2300"
user = "****"
password = "******"
f = open('smdr.log', 'a')
tn = telnetlib.Telnet(HOST,PORT)
tn.read_until(b"-")
time.sleep(2)
tn.write(user.encode('ascii') + b"\r")
tn.read_until(b'Enter Password:')
time.sleep(2)
tn.write(password.encode('ascii') + b"\r")
time.sleep(10)
## s = tn.read_all()
s=tn.read_very_eager()
tn.close()
f=open('smdr.log','w')
f.write(s)
f.close()

Вот собственно код. На питоне 3.4 он у меня на Win не работает
На Linux С питоном 2.7 работает нормально.
Если заменить s=tn.read_very_eager() на s = tn.read_all() то соответственно прога виснет.
Хотя если поставить s = tn.read_all() после tn.close() то работает. Но тож только на Линуксе.
Полагаю в питоне версии 3.х изменили алгоритм работы с файлом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB