我正在编写一个应用程序,我正在编写下载文件,并通过SSH从其他文件夹上传文件.我遇到的问题是我可以获得(下载)文件,但是当我尝试将它们(上传)到另一台服务器上时,我得到一个EOFError()异常.当我在paramiko\sftp.py中查看_write_all()时,似乎错误是在它无法向流中写入任何数据时引起的?我没有网络编程经验,所以如果有人知道它正在尝试做什么,并且能够与我沟通,我会很感激.
我写了一个简化版本的函数来处理我的连接为ssh().runCommand()显示了我的应用程序中的上传失败,而simpleTest()显示了sftp put是如何工作的,但除了我的SFTP对象的存储方式之外,我看不出runCommand()和simpleTest()之间的任何区别.一个存储在字典中,另一个存储在字典中.似乎字典是下载文件不起作用的问题,但事实并非如此.
有没有人知道什么可能导致这种行为,或者如果这种方式导致问题,可以推荐另一种方式来管理我的连接?
我正在使用Python 2.7和Paramiko 1.7.6.我已经在Linux和Windows上测试了这段代码,并得到了相同的结果.
编辑:现在包括代码.
import os
import paramiko
class ManageSSH:
"""Manages ssh connections."""
def __init__(self):
self.hosts = {"testbox": ['testbox', 'test', 'test']}
self.sshConnections = {}
self.sftpConnections = {}
self.localfile = "C:\\testfile"
self.remotefile = "/tmp/tempfile"
self.fetchedfile = "C:\\tempdl"
def ssh(self):
"""Manages ssh connections."""
for host in self.hosts.keys():
try:
self.sshConnections[host]
print "ssh connection is already open for %s" % host
except KeyError, e: # if no ssh connection for the host exists then open one
# open ssh connection …Run Code Online (Sandbox Code Playgroud) 关闭Twisted conch SSH连接的正确方法是什么?有没有明确的方法来做到这一点?
我见过的所有Twisted海螺的例子都关闭了SSH通道,然后停止了反应堆.反应堆关闭似乎处理关闭连接.但是,我正在使用带有wxPython的wxreactor,我不想停止反应堆,但是当我完成它时我想关闭ssh连接.
看完tcsconnection之后,看起来似乎是serviceStopped()方法.它关闭所有打开的通道并在完成时运行_cleanupGlobalDeferreds(),但后来我开始获得如下所示的异常:
Unhandled Error
Traceback (most recent call last):
File "C:\Users\me\venv\lib\site-packages\twisted\internet\tcp.py", line 203, in doRead
return self._dataReceived(data)
File "C:\Users\me\venv\lib\site-packages\twisted\internet\tcp.py", line 209, in _dataReceived
rval = self.protocol.dataReceived(data)
File "C:\Users\me\venv\lib\site-packages\twisted\conch\ssh\transport.py", line 438, in dataReceived
self.dispatchMessage(messageNum, packet[1:])
File "C:\Users\me\venv\lib\site-packages\twisted\conch\ssh\transport.py", line 460, in dispatchMessage
messageNum, payload)
--- <exception caught here> ---
File "C:\Users\me\venv\lib\site-packages\twisted\python\log.py", line 84, in callWithLogger
return callWithContext({"system": lp}, func, *args, **kw)
File "C:\Users\me\venv\lib\site-packages\twisted\python\log.py", line 69, in callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "C:\Users\me\venv\lib\site-packages\twisted\python\context.py", line 118, in callWithContext …Run Code Online (Sandbox Code Playgroud)