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.
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.
Antworten:
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.
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
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.
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()
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 sie fab 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'
Um 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
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"
myFTP.storbinary('STOR %s' % f, fh)
was ist % f
?
print ftp.pwd()
, um den aktuellen Pfad anzuzeigen , auf dem Sie sich befinden.