Наблюдение за TypeError при попытке вызвать устройство - PullRequest
0 голосов
/ 10 мая 2018

У меня есть ноутбук Centos 7, подключенный к моему устройству через порт LAN. Попытка войти в мое устройство и выполнить некоторые команды для моих задач автоматизации. На Centos 7 установлен python 3.6.4. Ниже приведен скрипт .py, установленный на ноутбуке.

#!/usr/local/lib python3.6
import pexpect
import sys
import re

def dologin(child):
    # Enter User Name
    child.expect ('login:')
    child.sendline ('admin')

    # Enter Password
    child.expect ('Password:')
    child.sendline ('123')
    return

def doprepcommands(child):
    # Enter config prompt
    child.expect ('NOS/27179080475072>')
    child.sendline ('config')

    # Issue command
    child.expect ('NOS/27179080475072/DEBUG/Config>')
    child.sendline ('show vlan')
    child.expect ('NOS/27179080475072/DEBUG/Config>')
    child.sendline ('exit')
    child.expect ('NOS/27179080475072/DEBUG>')
    child.sendline ('exit')
    child.expect ('NOS/27179080475072')
    child.sendline ('exit')
    return

# Spawn the telnet session
child = pexpect.spawn ('telnet 192.168.1.254')

 # Display progress on screen
child.logfile = sys.stdout
dologin(child)
doprepcommands(child)

Я наблюдаю нижеупомянутую ошибку на своем экране IDLE, когда запускаю скрипт. Исходя из деталей, найденных в разных блогах, я частично понимаю, что «sys.stdout» неправильно используется в моем скрипте (нужно использовать по-другому для python 2.7 и python 3.6). Я также пытаюсь выяснить, использует ли функции «dologin (child)», «doprepcommands (child)», которые я вызвал, правильный синтаксис для Python 3.

Я новичок в Python. Может кто-нибудь, пожалуйста, помогите мне с этой ошибкой?

================= RESTART: /home/aricent/Siva/test_debug.py        =================
Traceback (most recent call last):
 File "/home/Siva/test_debug.py", line 37, in <module>
 dologin(child)
 File "/home/Siva/test_debug.py", line 8, in dologin
   child.expect ('login:')
 File "/usr/local/lib/python3.6/site-packages/pexpect/spawnbase.py",           line 341, in expect
 timeout, searchwindowsize, async_)
 File "/usr/local/lib/python3.6/site-packages/pexpect/spawnbase.py",     line 369, in expect_list
 return exp.expect_loop(timeout)
 File "/usr/local/lib/python3.6/site-packages/pexpect/expect.py",    line 111, in expect_loop
 incoming = spawn.read_nonblocking(spawn.maxread, timeout)
 File "/usr/local/lib/python3.6/site-packages/pexpect/pty_spawn.py", line 485, in read_nonblocking
 return super(spawn, self).read_nonblocking(size)
 File "/usr/local/lib/python3.6/site-packages/pexpect/spawnbase.py", line 179, in read_nonblocking
 self._log(s, 'read')
 File "/usr/local/lib/python3.6/site-packages/pexpect/spawnbase.py", line 126, in _log
 self.logfile.write(s)
 TypeError: must be str, not bytes 

1 Ответ

0 голосов
/ 05 июня 2018

Я исправил это, пройдя некоторые доступные обсуждения в разных блогах. Я заменил «spawn» на «spawnu», и теперь я могу подключиться к своему устройству и выполнить необходимые операции. child = pexpect.spawn ('telnet 192.168.1.254') child.logfile = sys.stdout

child = pexpect.spawnu ('telnet 192.168.1.254', logfile=sys.stdout, timeout = None)
...