首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ftplib正在超时。

ftplib正在超时。
EN

Stack Overflow用户
提问于 2022-01-31 08:00:27
回答 1查看 68关注 0票数 1

我正试图将5个文件发送到ftp服务器。但是,5个文件中只有前3个文件被发送,而最后2个文件没有发送。

我怀疑这与超时有关,但我不确定,因为前3个文件的传输大约需要5分钟。

有什么建议吗?

##OLD代码

代码语言:javascript
复制
import subprocess

#ftp credentials
server='myserver.host.com'
user='admin@mywebsite.com'
password='mypassword'

#logging in to ftp
proc =subprocess.Popen(['ftp -p {}'.format(server)],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#sending username
proc.stdin.write(bytes(user+'\n',encoding='UTF-8'))
proc.stdin.flush()
#sending password
proc.stdin.write(bytes(password+'\n',encoding='UTF-8'))
proc.stdin.flush()

#name of ftp directory were files will be transferred
ftpdirectory='ftpdir'

#list of file directories to be transferred 
filestotransfer=['/home/user/Desktop/file1.csv','/home/user/Desktop/file2.csv','/home/user/Desktop/file3.csv','/home/user/Desktop/file4.csv','/home/user/Desktop/file5.csv']

#transferring files one by one
for i in filestotransfer:
    filename=i.split('/')[-1]
    syntaxx='put "{}" "/{}/{}"'.format(i,ftpdirectory,filename) #put /home/user/Desktop/file1.csv /ftpdir/file1.csv
    proc.stdin.write(bytes(syntaxx + '\n', encoding='UTF-8'))
    proc.stdin.flush()

##SOLUTION

代码语言:javascript
复制
import ftplib
import os.path


server = "myserver.host.com"
user = "admin@mywebsite.com"
password = "mypassword"
ftpdirectory = "/ftpdir"

filestotransfer = [
    "/home/user/Desktop/file1.csv",
    "/home/user/Desktop/file2.csv",
    "/home/user/Desktop/file3.csv",
    "/home/user/Desktop/file4.csv",
    "/home/user/Desktop/file5.csv",
]
for i in filestotransfer:
    try:
        with ftplib.FTP(server,timeout=10) as ftp:
            print('logging in')
            ftp.login(user, password)
    
    
            with open(i, "rb") as fp:
                dest_path = os.path.join(ftpdirectory, os.path.basename(i))
                ftp.storbinary(f"STOR {dest_path}", fp)
                print('completed sending {}'.format(i))
    
            ftp.close()
            
            
    except:
        print('timedout')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 08:07:14

正如我在注释中提到的,ftplib是一个内置的Python模块。

您的脚本简化为

代码语言:javascript
复制
import ftplib
import os.path
import posixpath

server = "myserver.host.com"
user = "admin@mywebsite.com"
password = "mypassword"
ftpdirectory = "/ftpdir"
filestotransfer = [
    "/home/user/Desktop/file1.csv",
    "/home/user/Desktop/file2.csv",
    "/home/user/Desktop/file3.csv",
    "/home/user/Desktop/file4.csv",
    "/home/user/Desktop/file5.csv",
]

with ftplib.FTP(server) as ftp:
    ftp.login(user, password)
    for filepath in filestotransfer:
        with open(filepath, "rb") as fp:
            dest_path = posixpath.join(ftpdirectory, os.path.basename(filepath))
            print(f"Transferring {filepath} to {dest_path}")
            ftp.storbinary(f"STOR {dest_path}", fp)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70922757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档