Я пытаюсь использовать Popen для автоматизации простого сеанса telnet. В python 2.6.5 работает следующий код:
openCmd = subprocess.Popen("telnet 192.168.1.1", shell=True, stdout=PIPE, stdin=PIPE)
time.sleep(1)
openCmd.stdin.write("username\r")
time.sleep(1)
openCmd.stdin.write("password\r")
time.sleep(1)
openCmd.stdin.write("some command\r")
openCmd.terminate()
В python 3 он жаловался на ошибку типа, поэтому я решил, что мне просто нужно добавить .encode () в конец каждого объекта str (как показано ниже). Добавление .encode () исправило ошибку типа, и я не получил никаких исключений, но команда, которую я пытаюсь запустить на удаленной машине, не запускается.
openCmd = subprocess.Popen("telnet 192.168.1.1", shell=True, stdout=PIPE, stdin=PIPE)
time.sleep(1)
openCmd.stdin.write("username\r".encode())
time.sleep(1)
openCmd.stdin.write("password\r".encode())
time.sleep(1)
openCmd.stdin.write("some command\r".encode())
openCmd.terminate()
Я также пробовал .encode ("ascii") и .encode ("UTF-8"). Что я делаю неправильно? Я полагаю, что проблема связана с кодировкой, но я точно не знаю ... Я запускаю эту программу на машине с Ubuntu 10.04.