Если это одно устройство, вы должны использовать решение, которое обрабатывает низкоуровневые socket
взаимодействия для вас ... У python есть несколько таких как pexpect
, exscript или paramiko
(только ssh) ... если это несколько устройств и вам требуется асинхронная связь, используйте ответ @ zeekay (хотя асинхронное программирование, особенно с витой, неприятно, если вы не уже знаком с ним).
Я ответил на вопрос, как вы telnet и отправляете список команд на одно устройство здесь ...
Поймать процесс умирания в перспективе
Ответ, приведенный выше, делает код эффективным, но для новичка сложнее понять ... Следующий код проще, он устанавливает соединение telnet на TCP / 23, ожидает *
, отправляет команду и помещает ответ на команду в mydata1
...
import pexpect as px
import sys
def send_this(child, retcode, COMMAND):
if retcode == 2:
child.sendline(COMMAND)
else:
raise RuntimeError, "Could not complete login, due to socket error"
def expect_this(child, EXPR, timeout = 10):
return child.expect([px.TIMEOUT, px.EOF, EXPR], timeout = timeout)
HOST = '192.168.49.49'
CMD1 = '1I'
PROMPT = '\*' #Note: you might not need the backslash
TIMEOUT = 10
child = px.spawn('telnet %s' % HOST)
retcode = expect_this(child, PROMPT)
send_this(child, retcode, CMD1)
retcode = expect_this(child, PROMPT)
mydata1 = child.before # mydata has the output from CMD1
Независимо от решения, самое важное - настроить время ожидания, чтобы вам не пришлось беспокоиться о длительных задержках в сотовой сети (которые, по моему опыту, иногда превышают 5 секунд).
Другая неприятная динамика в сотовой связи - это то, что многие потребительские устройства регулярно меняют свой IP-адрес при перемещении (из-за их зависимости от dhcp) ... TCP мало что может сделать, если это происходит ... если у вас нет статического адреса, соединение будет разорвано, когда устройство получит новый IP-адрес.