Raspberry Pi – FTP verbinding met een Python script
Onderstaande voorbeelden laten zien hoe je met een Python script FTP verbinding maakt en bestanden overzet.
FTP verbinding maken en bestand/folder lijst laten zien
Maak een script aan bijvoorbeeld ftp.py, met deze inhoud:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Bibliotheken importeren. from ftplib import FTP import sys # FTP gegevens. ftp_host = "" ftp_user = "" ftp_pass = "" try: # Creeer FTP sessie. ftp = FTP(ftp_host) ftp.login(ftp_user, ftp_pass) except: print 'FOUT: Kan geen verbinding maken met FTP server!' sys.exit() try: # Wijzig de folder naar de webspace (voorbeeld) ftp.cwd("/webspace/httpdocs/") ftp.retrlines('LIST') except: print 'FOUT: Kan bestandenlijst niet ophalen!' ftp.quit() sys.exit() # FTP sessie afsluiten. ftp.quit() |
Start het script met python ftp.py
1 2 3 |
drwxr-xr-x 3 f268851 pemcln 4096 Nov 22 19:02 folder1 drwxr-xr-x 19 f268851 pemcln 4096 Jan 24 18:12 folder2 drwxr-xr-x 5 f268851 pemcln 4096 Nov 22 18:56 bestand1 |
FTP verbinding maken en bestand uploaden
Het is ook mogelijk om een bestand te versturen via FTP, maak een script aan bijvoorbeeld ftp.py, met deze inhoud:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# Bibliotheken importeren. from ftplib import FTP import sys import os # FTP gegevens. ftp_host = "" ftp_user = "" ftp_pass = "" # Functie om onderscheid te maken tussen tekst en binaire bestanden. def ftp_upload(bestand): ext = os.path.splitext(bestand)[1] if ext in (".txt", ".htm", ".html"): # Commando voor overdracht van tekst bestanden. ftp.storlines("STOR " + bestand, open(bestand)) else: # Commando voor overdracht van binaire bestanden. ftp.storbinary("STOR " + bestand, open(bestand, "rb"), 1024) try: # Creëer FTP sessie. ftp = FTP(ftp_host) ftp.login(ftp_user, ftp_pass) except: print 'FOUT: Kan geen verbinding maken met FTP server!' sys.exit() try: # Wijzig de folder naar de webspace (voorbeeld) ftp.cwd("/webspace/httpdocs/") # Upload het bestand "test.txt" ftp_upload("test.txt") print 'Bestand geupload!' except: print 'FOUT: Kan bestand niet uploaden!' ftp.quit() sys.exit() # FTP sessie afsluiten. ftp.quit() |
Start het script met het commando: python ftp.py, het bestand test.txt zal geupload worden naar de FTP folder.
Bestand zelf aanmaken
Je kan uiteraard ook eerst een bestand aanmaken met bijvoorbeeld sensordata:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# Bibliotheken importeren. from ftplib import FTP import sys import os # FTP gegevens. ftp_host = "" ftp_user = "" ftp_pass = "" # Functie om onderscheid te maken tussen tekst en binaire bestanden. def ftp_upload(bestand): ext = os.path.splitext(bestand)[1] if ext in (".txt", ".htm", ".html"): # Commando voor overdracht van tekst bestanden. ftp.storlines("STOR " + bestand, open(bestand)) else: # Commando voor overdracht van binaire bestanden. ftp.storbinary("STOR " + bestand, open(bestand, "rb"), 1024) # Maak een bestand aan met bijvoorbeeld sensor data. file = open("test.txt", "w") file.write("Sensordata!") file.close() try: # Creëer FTP sessie. ftp = FTP(ftp_host) ftp.login(ftp_user, ftp_pass) except: print 'FOUT: Kan geen verbinding maken met FTP server!' sys.exit() try: # Wijzig de folder naar de webspace (voorbeeld) ftp.cwd("/webspace/httpdocs/") # Upload het bestand "test.txt" ftp_upload("test.txt") print 'Bestand geupload!' except: print 'FOUT: Kan bestand niet uploaden!' ftp.quit() sys.exit() # FTP sessie afsluiten. ftp.quit() |
FTP verbinding maken en bestand downloaden
Onderstaand laat een voorbeeld zien hoe je bestanden download via een FTP server en opslaat op de Raspberry Pi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# Bibliotheken importeren. from ftplib import FTP import sys import os # FTP gegevens. ftp_host = "" ftp_user = "" ftp_pass = "" # Functies om onderscheid te maken tussen tekst en binaire bestanden. def ftp_gettext(ftp_bestand, lokaal_bestand=None): # Haal een tekst bestand op. if lokaal_bestand is None: lokaal_bestand = ftp_bestand bestand = open(lokaal_bestand, 'wb') # Gebruik een lambda om nieuwe regels toe te voegen aan de regels die van de server worden gelezen. ftp.retrlines("RETR " + ftp_bestand, lambda s, w=bestand.write: w(s+"\n")) bestand.close() def ftp_getbinary(ftp_bestand, lokaal_bestand=None): # Haal een binair bestand op. if lokaal_bestand is None: lokaal_bestand = ftp_bestand bestand = open(lokaal_bestand, 'wb') ftp.retrbinary("RETR " + ftp_bestand, bestand.write) bestand.close() try: # Creeer FTP sessie. ftp = FTP(ftp_host) ftp.login(ftp_user, ftp_pass) except: print 'FOUT: Kan geen verbinding maken met FTP server!' sys.exit() try: # Wijzig de folder naar de webspace (voorbeeld) ftp.cwd("/webspace/httpdocs") # Download bestanden. ftp_gettext("script.js") ftp_getbinary("demo.css") print 'Bestanden gedownload!' except: print 'FOUT: Kan bestand niet downloaden!' ftp.quit() sys.exit() # FTP sessie afsluiten. ftp.quit() |
Start het script met het commando: python ftp.py, de bestanden zullen gedownload worden naar de Raspberry Pi.
Bronnen: pythonforbeginners.com / effbot.org / pythonforbeginners.com #2