Chciałbym zrobić skrypt do wgrania pliku na FTP.
Jak działałby system logowania? Szukam czegoś takiego:
ftp.login=(mylogin)
ftp.pass=(mypass)
I wszelkie inne dane logowania.
Użyj ftplib
, możesz napisać to w ten sposób:
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()
Użyj ftplib.FTP_TLS
zamiast tego, jeśli host FTP wymaga protokołu TLS.
Aby go odzyskać, możesz użyć urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
EDYCJA :
Aby znaleźć aktualny katalog, użyj FTP.pwd()
:
FTP.pwd (): Zwraca ścieżkę do bieżącego katalogu na serwerze.
Aby zmienić katalog, użyj FTP.cwd(pathname)
:
FTP.cwd (pathname): Ustaw bieżący katalog na serwerze.
print ftp.pwd()
, pokaże Ci aktualną ścieżkę, na której się znajdujesz.ftplib obsługuje teraz menedżerów kontekstu, więc myślę, że można to uczynić jeszcze łatwiejszym
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)
Nie ma potrzeby zamykania pliku ani sesji
źródło
Najprawdopodobniej będziesz chciał użyć modułu ftplib dla Pythona
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"
Spowoduje to zalogowanie na serwerze FTP. To, co zrobisz od tego miejsca, zależy od Ciebie. Twoje pytanie nie wskazuje na żadne inne operacje, które naprawdę wymagają wykonania.
źródło
Spróbuj tego:
#!/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()
źródło
SSHException: Error reading SSH protocol banner" when using ProxyCommand
pojawia się błąd podczas wybierania tej trasy na ftp.Właśnie odpowiedziałem na podobne pytanie tutaj IMHO, jeśli twój serwer FTP może komunikować się z Fabric, prosimy o Fabric. To znacznie lepsze niż robienie na surowo
ftp
.Mam konto FTP od,
dotgeek.com
więc nie jestem pewien, czy to zadziała na innych kontach FTP.#!/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')
zapisz plik jako
fabfile.py
i uruchomfab copy
lokalnie.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.
Ponownie, jeśli nie chcesz ciągle wpisywać hasła, po prostu dodaj
env.password = 'my_password'
źródło
While the SFTP protocol (which put uses)
linkAby uniknąć błędu szyfrowania, możesz również wypróbować poniższe polecenia
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 () upewnij się, że twoje połączenia są szyfrowane
źródło
Możesz użyć poniższej funkcji. Jeszcze tego nie testowałem, ale powinno działać dobrze. Pamiętaj, że miejscem docelowym jest ścieżka do katalogu, gdzie jako źródło jest pełna ścieżka do pliku.
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"
źródło
myFTP.storbinary('STOR %s' % f, fh)
czym jest% f
?