Seite 1 von 2

Datei vom FTP-Server holen. Bitte um schnelle Hilfe.

Verfasst: Mittwoch 3. März 2010, 10:51
von Minicar
Hallo =)
ich habe die Aufgabe die Datei die in meinem LineEdit steht vom FTP-Server zu holen. Also ich gebe z.B. test.txt in die TextBox ein, drücke enter und er soll dann die Datei runterladen.
Kann mir da vielleicht jemand helfen?
Ich mach das noch nicht lange und weiß nicht wie ich das machen soll, es sollte aber bis Freitag fertig sein.
hier erstmal das was ich schon habe

Code: Alles auswählen

import sys
from PyQt4 import QtGui, QtCore
import ftplib
import webbrowser

class Button(QtGui.QPushButton):
    def __init__(self, title, parent):
        QtGui.QPushButton.__init__(self, 'Enter', parent)
        self.setAcceptDrops(True)
       
    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat('text/plain'):
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        self.setText(event.mimeData().text())

 
class DragDrop(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)

        self.resize(400, 200)
        self.setWindowTitle('FTP_GUI')

        edit = QtGui.QLineEdit('', self)
        edit.resize(350,20)
        a = edit.setText
        edit.setDragEnabled(True)
        edit.move(30, 65)
   
        button = Button("Button", self)
        button.move(30, 100)

        self.Label1 = QtGui.QLabel('Filename', self)
        self.Label1.move (30, 45)

        self.Label2 = QtGui.QLabel('', self)
        self.Label2.resize(300,20)
        self.Label2.move (30, 135)

        con = button.connect(button, QtCore.SIGNAL("clicked()"), \
                             self.test)

        #ftp.connect()
        #ftp.quit()
        conn = edit.connect(edit, QtCore.SIGNAL("textChanged(QString)"),\
                     self.Label2, QtCore.SLOT("setText(QString)"))
    def test(self):
        ftp = webbrowser.open("mein FTP-Server")
        #ftp.connect()
        #ftp.login("", "")
        bild=""
        def f(data):
            global bild
            bild += data
        ftp.retrbinary("a", f)
        #self.Label1.SetText(bild)
        #ftp.quit

app = QtGui.QApplication(sys.argv)
bild = "" 
icon = DragDrop()
icon.show()
app.exec_()
wäre echt super, wenn mir da jemand helfen könnte, ist sehr wichtig.
Achso bitte nicht auf die Suche oder andere Sachen hinweisen. In der Suche habe ich nichts gefunden für mich. Wäre schön wenn ihr das an Hand von meinem Code machen könntet.

Liebe Grüße
Minicar :lol:

Verfasst: Mittwoch 3. März 2010, 11:31
von Defnull
Erster Treffer bei Google "python ftp" --> http://docs.python.org/library/ftplib.html

Und da ist sogar gleich oben ein Beispiel, das exakt das tut, was du willst:

Code: Alles auswählen

>>> from ftplib import FTP
>>> ftp = FTP('ftp.cwi.nl')   # connect to host, default port
>>> ftp.login()               # user anonymous, passwd anonymous@
>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()

Verfasst: Mittwoch 3. März 2010, 11:34
von Minicar
hm ich geb wohl zu kompliziertes bei google ein ^^ich suche die ganze zeit nach ftp-server datei download python =)
ich danke dir, werde es gleich mal versuchen

Verfasst: Mittwoch 3. März 2010, 11:45
von Minicar

Code: Alles auswählen

import sys
from PyQt4 import QtGui, QtCore
import ftplib
import webbrowser

class Button(QtGui.QPushButton):
    def __init__(self, title, parent):
        QtGui.QPushButton.__init__(self, 'Enter', parent)
        self.setAcceptDrops(True)
       
    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat('text/plain'):
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        self.setText(event.mimeData().text())

 
class DragDrop(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)

        self.resize(400, 200)
        self.setWindowTitle('FTP_GUI')

        edit = QtGui.QLineEdit('', self)
        edit.resize(350,20)
        a = edit.setText
        edit.setDragEnabled(True)
        edit.move(30, 65)
   
        button = Button("Button", self)
        button.move(30, 100)

        self.Label1 = QtGui.QLabel('Filename', self)
        self.Label1.move (30, 45)

        self.Label2 = QtGui.QLabel('', self)
        self.Label2.resize(300,20)
        self.Label2.move (30, 135)

        con = button.connect(button, QtCore.SIGNAL("clicked()"), \
                             self.test)

        #ftp.connect()
        #ftp.quit()
        conn = edit.connect(edit, QtCore.SIGNAL("textChanged(QString)"),\
                     self.Label2, QtCore.SLOT("setText(QString)"))

        

        
    def test(self):
        ftp = ftplib.FTP('ftp://ftp.test.de/')
        ftp.connect()
        ftp.login()               
        ftp.retrbinary('RETR README', open('README', 'wb').write) 
        
        ftp.quit() 
  
        #ftp = ftplib.FTP("localhost")
     #   ftp = webbrowser.open("ftp://ftp.test.de/")
        #ftp.connect()
        #ftp.login("", "")
      #  bild=""
      #  def f(data):
      #      global bild
      #      bild += data
      #  ftp.retrbinary("a", f)
        #self.Label1.SetText(bild)
        #ftp.quit


     
 
app = QtGui.QApplication(sys.argv)
#bild = "" 
icon = DragDrop()
icon.show()
app.exec_()
so sollte das dann funktionieren??
hier geht gar nichts. Sry aber ich mach das jetzt gerade mal ne Woche. Programmierung ist recht neu für mich.

Verfasst: Mittwoch 3. März 2010, 11:58
von Defnull
Natürlich passiert garnichts da ftp://ftp.test.de/ nicht existiert.

Verfasst: Mittwoch 3. März 2010, 12:00
von Minicar
jaaa.. habs nur so genannt weils ne firmenadd ist, funktioniert trotz richtiger adresse nicht.


Fehlermeldung:
Errno 11001 getaddrinfo failed

Verfasst: Mittwoch 3. März 2010, 12:30
von snafu
Lass mal das `ftp://` weg.

Verfasst: Mittwoch 3. März 2010, 12:37
von Minicar
funktioniert auch nicht. selbe Fehlermeldung

Verfasst: Mittwoch 3. März 2010, 13:15
von Minicar
noch ideen?

Verfasst: Mittwoch 3. März 2010, 13:33
von dahaze
hab zwar noch nicht damit gearbeitet aber vielelicht erreichst du die adresse nicht (FW?)
Kann deine FTP-Adresse vielleicht nicht aufgeloest werden? Vielleicht mal direkt mit der IP des FTP testen.....
Oder nutzt dein ftp ein anderen Port als 21?

http://docs.python.org/library/ftplib.h ... TP.connect

Kannst du ihn anpingen?

Verfasst: Mittwoch 3. März 2010, 13:35
von Minicar
ich kann ihn mit webbrowser.open(FTP-Server) problemlos öffnen

Verfasst: Mittwoch 3. März 2010, 13:39
von dahaze
Hmmm...
Ist bei deinem Browser vielleicht ein bestimmter Proxy eingestellt über den die Verbindung läuft? Das ist bei Firmen oft der Fall.
Wie man den allerdings dann einarbeitet, weiss ich nicht.
Wie gesagt, noch nie damit beschäftigt.^^ :wink:

Gruß,
DaHaze

Verfasst: Mittwoch 3. März 2010, 13:41
von Minicar
wie gesagt ich komme sonst auch drauf, ohne irgendein problem.
kann alles öffnen. auch mit nem andern server habe ich die gleiche fehlermeldung

Verfasst: Mittwoch 3. März 2010, 13:43
von EyDu
Hallo.

Ist diese ominöse Fehlermeldung geheim? ;-)

Sebastian

Verfasst: Mittwoch 3. März 2010, 13:44
von Minicar
nein

Fehlermeldung:
Errno 11001 getaddrinfo failed

hatte sie oben schonmal erwähnt

Verfasst: Mittwoch 3. März 2010, 14:03
von /me
Minicar hat geschrieben:wie gesagt ich komme sonst auch drauf, ohne irgendein problem.
kann alles öffnen. auch mit nem andern server habe ich die gleiche fehlermeldung
Das kann irgendein "Personal Firewall"-Geraffel sein. Der Browser darf dann möglicherweise nach draußen telefonieren und Python nicht.

Verfasst: Mittwoch 3. März 2010, 14:05
von Minicar
okay... und was kann ich da machen?

Verfasst: Mittwoch 3. März 2010, 14:12
von /me
Minicar hat geschrieben:okay... und was kann ich da machen?
Das weiß ich nicht. Ich kenne deine Arbeitsumgebung nicht, weiß nicht was da möglicherweise installiert ist und schon gar nicht wie man es konfiguriert.

Du könntest mal versuchen, auf deiner Entwicklungsmaschine einen FTP-Server zu installieren und den anzusprechen. Sollte das funktionieren, dann kannst du ziemlich sicher sein, dass dir beim Netzzugriff eine andere Software den Zugriff blockiert.

Verfasst: Mittwoch 3. März 2010, 14:17
von Minicar
ich werds zu hause testen mit meinem eigenen ftp-server wenn das geht weiß ich es liegt am firmennetz ^^ und wenn nicht liegts am programm

Verfasst: Mittwoch 3. März 2010, 15:25
von Minicar
falls ihr aber in der Zwischenzeit noch Ideen habt, bitte einfach schreiben was euch einfällt. ich bin für jeden Vorschlag dankbar.

Danke bis jetzt schonmal

LG Minicar