Я хотів би створити сценарій для завантаження файлу на FTP.
Як би працювала система входу? Я шукаю щось подібне:
ftp.login=(mylogin)
ftp.pass=(mypass)
І будь-який інший вхід в облікові дані.
Я хотів би створити сценарій для завантаження файлу на 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 (ім'я шляху): встановіть поточний каталог на сервері.
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.
Я щойно відповів на подібне запитання тут
IMHO, якщо ваш 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'
Щоб уникнути помилки шифрування, ви також можете спробувати команди нижче
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
?
print ftp.pwd()
покаже вам поточний шлях, на якому ви перебуваєте.