for-loop를 사용하여 ftp 사이트에서 여러 파일을 다운로드하려고합니다. 다음 코드는 python.exe 종료 창이 팝업되기 전에 루프의 처음 두 파일에서만 작동하는 것으로 보입니다. 두 개의 다운로드 파일은 완벽하지만 종료 할 때 다운로드 한 세 번째 파일은 비어 있습니다. 나는 나머지 파일들을 얻지 못한다. 어떤 아이디어가 문제 일 수 있습니까?여러 파일에 대한 for-loop에서 QtNetwork.QFtp.get 다운로드가 실패하는 이유는 무엇입니까?
from PyQt4 import QtCore, QtGui, QtNetwork
class FtpWindow(QtGui.QDialog):
def __init__(self, parent=None):
self.fileList = QtGui.QTreeWidget()
self.ftp = QtNetwork.QFtp(self)
self.progressDialog = QtGui.QProgressDialog(self)
self.downloadAllButton.clicked.connect(self.downloadAllFile)
self.ftp.commandFinished.connect(self.ftpCommandFinished)
def downloadAllFile(self):
for jj in range(self.fileList.topLevelItemCount()): # how many files in a particular folder
fileName = self.fileList.topLevelItem(jj).text(0)
self.outFile = QtCore.QFile(fileName)
self.ftp.get(fileName, self.outFile) #download one file at a time
self.progressDialog.setLabelText("Downloading %s..." % fileName)
self.progressDialog.exec_()
def ftpCommandFinished(self, _, error):
self.setCursor(QtCore.Qt.ArrowCursor)
if self.ftp.currentCommand() == QtNetwork.QFtp.Get:
if error:
self.statusLabel.setText("Canceled download of %s." % self.outFile.fileName())
self.outFile.close()
self.outFile.remove()
else:
self.statusLabel.setText("Downloaded %s to current directory." % self.outFile.fileName())
self.outFile.close()
self.outFile = None
self.enableDownloadButton()
self.progressDialog.hide()
나는 더 많은 코드가 필요합니다. 'self.progressDialog.exec _()'는 블럭 모달 대화 상자 여야합니다. ftp get이 비 차단 상태 인 것처럼 보이므로 commandFinished() 신호를 사용하여 다운로드가 완료 될 때까지 기다려야합니다. outFile 변수를 덮어 쓰면 문제가 발생할 수 있습니다. http://pyside.github.io/docs/pyside/PySide/QtNetwork/QFtp.html#PySide.QtNetwork.PySide.QtNetwork.QFtp.get – HashSplat
@HashSplat, 저는 다음을 사용합니다 : self.progressDialog = QtGui.QProgressDialog (self) . – Curiosity
@HashSplat 기본적으로, 나는 [이 버전] (http://stackoverflow.com/questions/1995046/creating-an-ftp-client-with-python)을 기반으로 모든 파일을 다운로드하는 클릭 한 번을 만들려고 시도했습니다 – Curiosity