Exscript: Как я могу переключаться между интерактивными и неинтерактивными сессиями?

Я пытаюсь программно открыть сеанс с сервером Unix, а затем передать управление пользователю сценария до нажатия Ctrl+y, после чего программа должна получить контроль. Я использую Eclipse и WinPython 2.7. вот код

from Exscript.util.interact import read_login
from Exscript.protocols import SSH2


def Test ():
    print "Interactive session closed"

account = read_login()    # Prompt the user for his name and password
conn = SSH2()
conn.set_driver('generic')             # We choose to use SSH2
conn.connect('remmotehostip') # Open the SSH connection
conn.login(account)       # Authenticate on the remote host
conn.execute('uname -a')  # Execute the "uname -a" command
print conn.response
conn.interact({'\031': Test()})
conn.send('exit\r')       # Send the "exit" command
conn.close() 

вышеупомянутое терпит неудачу с

     Traceback (most recent call last):
  File "C:\Users\mynamehere\Documents\Eclipse\ESNetworkDiscovery\TestInteractiveSession.py", line 20, in <module>
    conn.interact({'\031': Test()})   
      File "C:\Utils\WPy2.7-32\python-2.7.13\lib\site-packages\Exscript\protocols\SSH2.py", line 364, in interact
        return self._open_shell(self.shell, key_handlers, handle_window_size)   
      File "C:\Utils\WPy2.7-32\python-2.7.13\lib\site-packages\Exscript\protocols\Protocol.py", line 1190, in _open_shell
        return self._open_windows_shell(channel, key_handlers, handle_window_size)
    TypeError: _open_windows_shell() takes exactly 3 arguments (4 given)

Что я делаю неправильно?

1 ответ

Похоже, ошибка в Exscript.

Из Protocol.py:

        return self._open_windows_shell(channel, key_handlers, handle_window_size)
...
    def _open_windows_shell(self, channel, key_handlers):

Эта функция не принимает 4-й handle_window_size аргумент ( внимательно относитесь к тому, как python считает аргументы в этой ситуации).

Очевидно, вы не используете последнюю версию, но, насколько я могу судить, даже в самой последней есть ошибка. Просматривая историю исходников, я бы сказал, что ошибка была введена в 2.2, а не в 2.1. Я не проверял это, просто прочитал источник, и я не эксперт по питону, так что я могу быть совершенно неправ.

Если я прав, вы не можете сделать много, кроме:

  • используя 2.1 (которому, видимо, 7 лет)
  • исправление локально (возможно, убрать последний аргумент... не уверен, что это сработает!)
  • подача вопроса
Другие вопросы по тегам