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.
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.
Odpowiedzi:
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.
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
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.
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()
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 uruchom fab 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'
Aby 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
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"
myFTP.storbinary('STOR %s' % f, fh)
czym jest % f
?
print ftp.pwd()
, pokaże Ci aktualną ścieżkę, na której się znajdujesz.