Ich möchte ein Skript erstellen, um eine Datei auf FTP hochzuladen.
Wie würde das Anmeldesystem funktionieren? Ich suche so etwas:
ftp.login=(mylogin)
ftp.pass=(mypass)
Und alle anderen Anmeldeinformationen.
Verwenden ftplib
Sie, Sie können es so schreiben:
import ftplib
session = ftplib.FTP('server.address.com','USERNAME','PASSWORD')
file = open('kitten.jpg','rb') # file to send
session.storbinary('STOR kitten.jpg', file) # send the file
file.close() # close file and FTP
session.quit()
Verwenden Sie ftplib.FTP_TLS
stattdessen, wenn Ihr FTP-Host TLS benötigt.
Um es abzurufen, können Sie Folgendes verwenden urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
EDIT :
Um das aktuelle Verzeichnis herauszufinden, verwenden Sie FTP.pwd()
:
FTP.pwd (): Gibt den Pfadnamen des aktuellen Verzeichnisses auf dem Server zurück.
Verwenden Sie zum Ändern des Verzeichnisses FTP.cwd(pathname)
:
FTP.cwd (Pfadname): Legen Sie das aktuelle Verzeichnis auf dem Server fest.
print ftp.pwd()
, um den aktuellen Pfad anzuzeigen , auf dem Sie sich befinden.ftplib unterstützt jetzt Kontextmanager, sodass ich denke, dass dies noch einfacher gemacht werden kann
from ftplib import FTP from pathlib import Path file_path = Path('kitten.jpg') with FTP('server.address.com', 'USER', 'PWD') as ftp, open(file_path, 'rb') as file: ftp.storbinary(f'STOR {file_path.name}', file)
Sie müssen die Datei oder die Sitzung nicht schließen
quelle
Sie werden höchstwahrscheinlich das ftplib-Modul für Python verwenden wollen
import ftplib ftp = ftplib.FTP() host = "ftp.site.uk" port = 21 ftp.connect(host, port) print (ftp.getwelcome()) try: print ("Logging in...") ftp.login("yourusername", "yourpassword") except: "failed to login"
Dadurch werden Sie bei einem FTP-Server angemeldet. Was Sie von dort aus tun, liegt bei Ihnen. Ihre Frage zeigt keine anderen Operationen an, die wirklich ausgeführt werden müssen.
quelle
Versuche dies:
#!/usr/bin/env python import os import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('hostname', username="username", password="password") sftp = ssh.open_sftp() localpath = '/home/e100075/python/ss.txt' remotepath = '/home/developers/screenshots/ss.txt' sftp.put(localpath, remotepath) sftp.close() ssh.close()
quelle
SSHException: Error reading SSH protocol banner" when using ProxyCommand
Fehler erhalten, wenn Sie diese Route auf FTP gehen.Ich habe gerade eine ähnliche Frage hier beantwortet , IMHO, wenn Ihr FTP-Server in der Lage ist, mit Fabric zu kommunizieren, bitte uns Fabric. Es ist weitaus besser als roh zu machen
ftp
.Ich habe ein FTP-Konto von,
dotgeek.com
daher bin ich mir nicht sicher, ob dies für andere FTP-Konten funktioniert.#!/usr/bin/python from fabric.api import run, env, sudo, put env.user = 'username' env.hosts = ['ftp_host_name',] # such as ftp.google.com def copy(): # assuming i have wong_8066.zip in the same directory as this script put('wong_8066.zip', '/www/public/wong_8066.zip')
Speichern Sie die Datei als
fabfile.py
und führen Sie siefab copy
lokal aus.yeukhon@yeukhon-P5E-VM-DO:~$ fab copy2 [1.ai] Executing task 'copy2' [1.ai] Login password: [1.ai] put: wong_8066.zip -> /www/public/wong_8066.zip Done. Disconnecting from 1.ai... done.
Wenn Sie nicht immer ein Passwort eingeben möchten, fügen Sie einfach hinzu
env.password = 'my_password'
quelle
While the SFTP protocol (which put uses)
LinkUm den Verschlüsselungsfehler zu vermeiden, können Sie auch die folgenden Befehle ausprobieren
ftp = ftplib.FTP_TLS("ftps.dummy.com") ftp.login("username", "password") ftp.prot_p() file = open("filename", "rb") ftp.storbinary("STOR filename", file) file.close() ftp.close()
ftp.prot_p () stellt sicher, dass Ihre Verbindungen verschlüsselt sind
quelle
Sie können die folgende Funktion verwenden. Ich habe es noch nicht getestet, aber es sollte gut funktionieren. Denken Sie daran, dass das Ziel ein Verzeichnispfad ist, dessen Quellpfad als Quelle vollständig ist.
import ftplib import os def uploadFileFTP(sourceFilePath, destinationDirectory, server, username, password): myFTP = ftplib.FTP(server, username, password) if destinationDirectory in [name for name, data in list(remote.mlsd())]: print "Destination Directory does not exist. Creating it first" myFTP.mkd(destinationDirectory) # Changing Working Directory myFTP.cwd(destinationDirectory) if os.path.isfile(sourceFilePath): fh = open(sourceFilePath, 'rb') myFTP.storbinary('STOR %s' % f, fh) fh.close() else: print "Source File does not exist"
quelle
myFTP.storbinary('STOR %s' % f, fh)
was ist% f
?