<p>以下Channel子类缺少适当的错误处理,但它可能会帮助您开始使用:</p>
<pre><code>class SFTPChannel(channel.SSHChannel):
name = 'session'
def channelOpen(self, whatever):
d = self.conn.sendRequest(self, 'subsystem', common.NS('sftp'), wantReply=True)
d.addCallbacks(self._cbSFTP)
def _cbSFTP(self, result):
self.client = FileTransferClient()
self.client.makeConnection(self)
self.dataReceived = self.client.dataReceived
@defer.inlineCallbacks
def send_file(self, path, data, mode=0700):
ifile = yield self.client.openFile(path, FXF_WRITE | FXF_CREAT, dict(permissions=mode))
yield ifile.writeChunk(0, data)
@defer.inlineCallbacks
def get_file(self, local_path, remote_path, mode=0700):
f = open(local_path, 'w')
ifile = yield self.client.openFile(remote_path, FXF_READ, dict())
n = 0
try:
while True:
s = yield ifile.readChunk(n, 16 * 1024)
n += len(s)
f.write(s)
except EOFError:
pass
f.close()
os.chmod(local_path, mode)
</code></pre>