Je voudrais faire un script pour télécharger un fichier sur FTP.
Comment le système de connexion fonctionnerait-il? Je cherche quelque chose comme ça:
ftp.login=(mylogin)
ftp.pass=(mypass)
Et toute autre signature dans les informations d'identification.
Utilisez ftplib
, vous pouvez l'écrire comme ceci:
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()
Utilisez plutôt ftplib.FTP_TLS
si votre hôte FTP requiert TLS.
Pour le récupérer, vous pouvez utiliser urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
MODIFIER:
Pour trouver le répertoire actuel, utilisez FTP.pwd()
:
FTP.pwd (): Retourne le chemin du répertoire actuel sur le serveur.
Pour changer de répertoire, utilisez FTP.cwd(pathname)
:
FTP.cwd (chemin d'accès): définit le répertoire actuel sur le serveur.
Vous voudrez probablement utiliser le module ftplib pour python
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"
Cela vous connecte à un serveur FTP. Ce que vous faites à partir de là dépend de vous. Votre question n'indique aucune autre opération à faire.
Essaye ça:
#!/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()
Je viens de répondre à une question similaire ici IMHO, si votre serveur FTP est capable de communiquer avec Fabric s'il vous plaît nous Fabric. C’est bien mieux que de faire ftp
brut.
J'ai un compte FTP à partir de dotgeek.com
, donc je ne suis pas sûr que cela fonctionnera pour d'autres comptes 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')
enregistrez le fichier en tant que fabfile.py
et exécutez fab copy
localement.
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.
Encore une fois, si vous ne voulez pas entrer le mot de passe tout le temps, ajoutez simplement
env.password = 'my_password'
ftplib maintenant prend en charge les gestionnaires de contexte donc je suppose que cela peut être encore plus facile
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)
Pas besoin de fermer le fichier ou la session
Vous pouvez utiliser la fonction ci-dessous. Je ne l'ai pas encore testé, mais cela devrait fonctionner correctement. Rappelez-vous que la destination est un chemin de répertoire où source est chemin complet.
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"