在我之前的问题没有答案的情况下。在
我使用multihtreading通过控制套接字保持一个大的FTP传输活动。在
不幸的是,这需要使用ftplib.ftp.transfercmd()(而不是FTP.retrbinary文件(),它不提供显式套接字控制),它以独占方式返回数据套接字,并允许您在不阻塞的情况下发送“NOOP”命令。在
这是一个问题,因为transfercmd(“RETR”…)默认为ASCII模式下的dwonload,这会破坏我试图下载的视频文件。在
我搜索了所有我能找到一个明确的二进制模式命令,但没有用。有什么想法吗?在
这是我的下载代码def downloadFile(filename, folder):
#login
ftp = FTP(myhost,myuser,passw)
ftp.set_debuglevel(2)
sock = ftp.transfercmd('RETR ' + filename)
def background():
f = open(folder + filename, 'wb')
while True:
block = sock.recv(1024*1024)
if not block:
break
f.write(block)
sock.close()
t = threading.Thread(target=background)
t.start()
while t.is_alive():
t.join(60)
ftp.voidcmd('NOOP')