我正试图将5个文件发送到ftp服务器。但是,5个文件中只有前3个文件被发送,而最后2个文件没有发送。
我怀疑这与超时有关,但我不确定,因为前3个文件的传输大约需要5分钟。
有什么建议吗?
##OLD代码
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
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')发布于 2022-01-31 08:07:14
正如我在注释中提到的,ftplib是一个内置的Python模块。
您的脚本简化为
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)https://stackoverflow.com/questions/70922757
复制相似问题