Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2015 15:47:27

crazyenimal
Зарегистрирован: 2015-12-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение Telnet в файл

Приветствую!
Есть такая задача.
Подключиться по 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 секунд ничего не поступило, то оборвать коннект и записать всё это в файл ????

Буду очень благодарен!

Офлайн

#2 Дек. 9, 2015 12:08:09

Mouse
Зарегистрирован: 2014-03-09
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение Telnet в файл

открыть файл в байтовом режиме??

Офлайн

#3 Дек. 9, 2015 12:53:49

crazyenimal
Зарегистрирован: 2015-12-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение Telnet в файл

Mouse
открыть файл в байтовом режиме??
Как выяснилось, новый питон ещё та кривятина. Проще оказалось использовать метод read_very_eager(). А запускать сам скрипт на линуксе. Он и файл создаёт и кладёт в него всю инфу так как я хочу.

Офлайн

#4 Дек. 9, 2015 20:08:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Чтение Telnet в файл

crazyenimal
новый питон ещё та кривятина
crazyenimal
. А запускать сам скрипт на линуксе
Думаю вы горячитесь.
Воспроизведите ошибку законсервировав ответ например при помощи Pickle. Выкладывайте сюда, вместе с вашей писалкой. Тогда вам подскажут что не так, поскольку ошибку будет легко воспроизвести.



Офлайн

#5 Дек. 10, 2015 10:19:08

crazyenimal
Зарегистрирован: 2015-12-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение Telnet в файл

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.х изменили алгоритм работы с файлом.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version