Я хотел бы сделать скрипт для загрузки файла на FTP.
Как будет работать система входа в систему? Я ищу что-то вроде этого:
ftp.login=(mylogin)
ftp.pass=(mypass)
И любые другие учетные данные.
Используйте ftplib
, можно написать так:
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()
Используйте ftplib.FTP_TLS
вместо этого, если FTP-хост требует TLS.
Чтобы получить его, вы можете использовать urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
ИЗМЕНИТЬ :
Чтобы узнать текущий каталог, используйте FTP.pwd()
:
FTP.pwd (): возвращает путь к текущему каталогу на сервере.
Чтобы изменить каталог, используйте FTP.cwd(pathname)
:
FTP.cwd (путь): установите текущий каталог на сервере.
print ftp.pwd()
покажет вам текущий путь, по которому вы находитесь.ftplib теперь поддерживает менеджеры контекста, поэтому я думаю, что это можно сделать еще проще
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)
Нет необходимости закрывать файл или сеанс
источник
Скорее всего, вы захотите использовать модуль ftplib для 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"
Это позволит вам войти на FTP-сервер. Что делать оттуда - решать вам. Ваш вопрос не указывает на какие-либо другие операции, которые действительно необходимо выполнить.
источник
Попробуй это:
#!/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
при переходе по ftp по этому маршруту часто возникают ошибки.Я только что ответил на аналогичный вопрос здесь. ИМХО, если ваш FTP-сервер может общаться с Fabric, пожалуйста, используйте Fabric. Это намного лучше, чем сыроедение
ftp
.У меня есть учетная запись FTP,
dotgeek.com
поэтому я не уверен, будет ли она работать для других учетных записей 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')
сохраните файл как
fabfile.py
и запуститеfab copy
локально.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.
Еще раз, если вы не хотите постоянно вводить пароль, просто добавьте
env.password = 'my_password'
источник
While the SFTP protocol (which put uses)
ссылкаЧтобы избежать ошибки шифрования, вы также можете попробовать следующие команды
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 () убедитесь, что ваши соединения зашифрованы
источник
Вы можете использовать функцию ниже. Я еще не тестировал, но все должно работать нормально. Помните, что место назначения - это путь к каталогу, а в качестве источника - полный путь к файлу.
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)
чем есть% f
?