'положить' в SFTP с помощью Paramiko

Я установил и написал следующий Paramiko, который не может поместить файл. Он легко может «получить» файл и выполнить ls команды на нем.

#set username & password
username='runaway'
password='runaway'
port=22
source= '/Unzip.sh' 
destination ='/var/mpx/www/http'


#SFTP
client.load_system_host_keys()
print " hostname =%s \n username=%s \n password=%s \n" (hostname,username,password)
t = paramiko.Transport((hostname, port)) 
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(source,destination)
#sftp.close()
#t.close()

Использование команды 'put' дает следующую ошибку и трассировку стека:

File "upload_file.py", line 84, in ?
    sftp.put(source,destination)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 522, in put
    fr = self.file(remotepath, 'wb')
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 221, in open
    t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 572, in _request
    return self._read_response(num)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 619, in _read_response
    self._convert_status(msg)
  File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 649, in _convert_status
    raise IOError(text)
IOError: Failure

Как мне это преодолеть?


person fixxxer    schedule 22.06.2010    source источник


Ответы (2)


Решение показалось мне очень забавным!

source= '/Unzip.sh' 
destination ='/var/mpx/www/http/Unzip.sh'

Просто изменил путь назначения, чтобы включить имя файла. Не ожидал такой ошибки, исходящей от пакета Python.

person fixxxer    schedule 23.06.2010
comment
вы могли бы исправить paramiko в этом отношении;) т.е. чтобы он понимал папки назначения. ваше здоровье - person nuts; 11.06.2014

Это также происходит в 2.0.2, когда вы пытаетесь sftp.mkdir('/exists'):

Traceback (most recent call last):
  ...
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 380, in mkdir
    self._request(CMD_MKDIR, path, attr)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 730, in _request
    return self._read_response(num)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 781, in _read_response
    self._convert_status(msg)
  File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 811, in _convert_status
    raise IOError(text)
IOError: Failure

Это было мое исправление Python 2.7.9:

try:
    sftp.mkdir(remote_dir)
except IOError:
    logging.debug('%s already exists.', remote_dir)
person David Tucker    schedule 18.08.2016