【问题标题】:Python FTP Upload with Multiprocessing - Uploaded Files not complete使用多处理的 Python FTP 上传 - 上传的文件不完整
【发布时间】:2014-03-03 06:56:03
【问题描述】:

我试图创建一个多处理的 ftp 上传,就像这里以许多不同的方式描述的那样。脚本已经上传了我选择的文件,但每次上传大约 90 KB 后上传都会中断。有没有人暗示我做错了什么? 提前致谢。 问候彼得

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ftplib
from ftplib import FTP
from multiprocessing import Process
import os


##### Config für den Upload Path ####
Path='c:/'
#####################################

def uploadZip(zipName,PathUpload):
    # Hochzuladenden XML
    # Upload zu Datenausstausch - Test
    ftpsportschau= FTP('xxxxx')
    ftpsportschau.login ('xxx', 'xxxx')
    zipDatei = open('%s%s' %(PathUpload,zipName),'r')
    try:
       ftpsportschau.storbinary('STOR %s' % zipName, zipDatei)

    except ftplib.error_perm:
       print "PermError: cannot upload file %s" % zipName

    except ftplib.error_temp:
       print "TempError: cannot upload file %s" % zipName

    zipDatei.close()
    ftpsportschau.quit()
    return 

def UploadAsync(FileListe,PathAsync):
    ''' Funktion zum Upload mit parallelen Prozessen
        Sie enthält nicht den Upload Befehl,sondern nur den Aufruf der Prozesse
    '''
    print ' List in Async'+'\n'
    print FileListe

    try:
        for filename in FileListe:
            p = Process(target=uploadZip, args=(filename,PathAsync))
            p.start()

    except:
        print 'An error has occured'

def Files(PathFiles):
    ''' Funktion zum Ermitteln der Files'''
    UploadListe=[]
    Files=os.listdir(PathFiles)
    print Files
    print '\n'
    for files in Files:
        if files.endswith('.zip'):
            UploadListe.append(files)
        else: continue
    print UploadListe
    print '\n'
    return UploadListe

if __name__ == "__main__":
    UploadAsync(Files(Path),Path)

【问题讨论】:

  • “上传中断”是什么意思?确切地说,您的脚本打印的是什么?
  • 您好 Rob,问题是脚本只上传了前 90 KB 并且没有错误通知就停止了。该问题已通过我之前在打开文件时未使用的二进制模式得到解决。我愚蠢的错。感谢您的回答。
  • 不客气。请记住“接受”我的回答(点击我的回答旁边的复选标记),这样其他人就不会再花时间在这上面了。

标签: python file-upload ftp multiprocessing


【解决方案1】:

由于您似乎是以二进制格式传输文件,因此您应该在 open 中使用 'b' 限定符:

zipDatei = open('%s%s' %(PathUpload,zipName),'rb')

【讨论】:

  • 您好,谢谢您的回答,您完全正确:(我看不到,我不知道为什么。非常感谢。问候
猜你喜欢
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 2021-07-12
相关资源
最近更新 更多