上传时远程目录不会退出错误

时间:2014-10-20 09:13:06

标签: python django paramiko

当我运行exceptions.IOError时,

python mysftpclient.py。我是python的新手,你能说出导致这个错误的原因吗??

错误

*** Caught exception: <type 'exceptions.IOError'>: [Errno 2] Directory does not exist.
============================================================
Total files copied: 0
All operations complete!
============================================================

代码

def put_dir(self, source, target):
    ''' Uploads the contents of the source directory to the target path. The
        target directory needs to exists. All subdirectories in source are 
        created under target.
    '''
    for item in os.listdir(source):
        if os.path.isfile(os.path.join(source, item)):
            self.put(os.path.join(source, item), '%s/%s' % (target, item))
        else:
            my_mkdir(self, '%s/%s' % (target, item), 551, ignore_existing=True)
            put_dir(self, os.path.join(source, item), '%s/%s' % (target, item))

def my_mkdir(self, sftp, path, mode=511, ignore_existing=False):
    ''' Augments mkdir by adding an option to not fail if the folder exists  '''
    try:
        sftp.mkdir(path, mode)
    except IOError:
        if ignore_existing:
            pass
        else:
            raise

更新

我认为在引起问题的行之下

# now, connect and use paramiko Transport to negotiate SSH2 across the connection
try:
    print 'Establishing SSH connection to:', hostname, port, '...'
    t = paramiko.Transport((hostname, port))
    t.connect()

    agent_auth(t, username)

    if not t.is_authenticated():
        print 'RSA key auth failed! Trying password login...'
        t.connect(username=username, password=password, hostkey=hostkey)
    else:
        sftp = t.open_session()
    sftp = paramiko.SFTPClient.from_transport(t)
    parent=os.path.split(dir_local)[1]
    try:
        sftp.mkdir(parent)
        sftp.chdir(parent)
    except IOError, e:
        print '(assuming ', dir_remote, 'exists)', e
    put_dir(sftp, dir_local, dir_remote)
except Exception, e:
    print '*** Caught exception: %s: %s' % (e.__class__, e)
    try:
        t.close()
    except:
        pass
print '=' * 60
print 'Total files copied:',files_copied
print 'All operations complete!'
print '=' * 60

我不知道我得到了什么

(assuming  /NewFolder/201410181636099007 exists) Unable to create the file/directory

1 个答案:

答案 0 :(得分:0)

我认为&#34; sftp.mkdir(父母)&#34;抛出这个例外。然后它直接跳转到异常块,在那里它是你提到的打印错误。

(assuming  /NewFolder/201410181636099007 exists) Unable to create the file/directory

那么你的脚本正在调用put_dir,它可能期望通过sftp.chdir(parent)将路径设置为paramiki SFTP,但是当引发异常时这不是真的。

我认为你可以把&#34; sftp.chdir(父母)&#34;在put_dir之前的行,因为在任何情况下你都想设置你的路径。 例如,

 try:
        sftp.mkdir(parent)
 except IOError, e:
        print '(assuming ', dir_remote, 'exists)', e

    sftp.chdir(parent)
    put_dir(sftp, dir_local, dir_remote)