6

我正在尝试以编程方式打开与 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)

我究竟做错了什么 ?

4

1 回答 1

2

看起来像 Exscript 中的一个错误。

Protocol.py

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

该函数不接受第四个handle_window_size参数(注意python在这种情况下如何计算参数)。

显然你没有使用最新版本,但据我所知,即使是最新版本也有错误。查看源代码历史,我会说这个错误是在 2.2 中引入的,它在 2.1 中不存在。我没有测试过它,只是阅读了源代码,而且我不是 python 专家,所以我可能完全错了。

如果我是对的,除了:

  • 使用 2.1(这显然是 7 岁)
  • 在本地修补它(也许删除最后一个参数......不确定这会奏效!)
  • 提出问题
于 2017-12-14T00:27:22.700 回答