2
在沒有我的上一個問題的答案。python ftplib transfercmd()BINARY模式
我正在使用multihtreading通過控制套接字保持大型FTP傳輸活着。
不幸的是,這需要使用ftplib.ftp.transfercmd()(而不是FTP.retrbinary(),它沒有給出明確的套接字控制),它專門返回數據套接字並允許您發送'NOOP'命令而不會阻塞。
這是一個問題,因爲transfercmd(「RETR」...)默認爲在ASCII模式下下載,這會破壞我嘗試下載的視頻文件。
我已經搜遍了一切可以找到明確的BINARY模式命令無濟於事。有任何想法嗎?
繼承人是我的下載代碼
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')
你很可能沒有看到我的[第二個評論](HTTP:/ /stackoverflow.com/questions/19703379/python-ftplib-handbrake-unrecognized-file-type?noredirect=1#comment29268611_19703379)。 – ThinkChaos
hi @plg。我看到了您的第二條評論,但不幸的是您沒有正確閱讀任何帖子。我被阻止使用RETRBINARY,因爲我需要明確地訪問數據套接字,並且只有transfercmd爲您提供那個 – hammus
哦,對不起,我沒有看過ftplib的源代碼,並假定它也返回一個套接字。我建議你看看'FTP.transfercmd()'實際上是如何打開套接字並擴展類以覆蓋該方法的。 [src](http://hg.python.org/cpython/file/2.7/Lib/ftplib.py#l374)'ntrasfercmd()'就在上面,所以只需向上滾動一下。 – ThinkChaos