Функции чтения telnetlib Python возвращают больше данных, чем ожидалось - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над клиентом telnet для IBM As400 и столкнулся с некоторыми проблемами при получении нужного количества данных.Сначала программа должна подключиться к сеансу telnet, в котором есть поле имени пользователя и пароля, в которое она пишет, затем перейти к пользовательской оболочке, которая позволяет сотрудникам вводить данные, получать доступ к базе данных и т. Д. Когда я вызываю read_very_eager, она возвращает буферзаполненный экраном входа и сеансом после входа в систему, а не только сеансом после входа в систему.Я не могу точно сказать, почему это происходит, и другие read_xyz методы также ничего не печатают или имеют буфер, заполненный только первыми несколькими байтами экрана входа в систему.Мой код следующий (конфиденциальные данные опущены):

def login():
    tn = telnetlib.Telnet(host, port)
    sleep(1)

    tn.write(username + "\t")
    tn.write(password + "\r\n")
    sleep(1)

    data = tn.read_very_eager()

    print data

def main():
    print "started"
    login()

main()

1 Ответ

0 голосов
/ 25 мая 2018

Прочтите подсказки логина и пароля перед отправкой ответов.В противном случае они сохраняются в потоке и будут прочитаны при следующем вызове чтения.

tn.read_some()
tn.write(username + "\t")
tn.read_some()
tn.write(password + "\r\n")
data = tn.read_some()

И используйте read_some() вместо read_very_eager(), чтобы вам не нужно было сначала спать.Он будет ждать, пока что-то станет доступным, а затем вернет все, что там есть.

...