Tôi muốn tạo một tập lệnh để tải một tệp lên FTP.
Hệ thống đăng nhập sẽ hoạt động như thế nào? Tôi đang tìm kiếm một cái gì đó như thế này:
ftp.login=(mylogin)
ftp.pass=(mypass)
Và bất kỳ thông tin đăng nhập nào khác.
Tôi muốn tạo một tập lệnh để tải một tệp lên FTP.
Hệ thống đăng nhập sẽ hoạt động như thế nào? Tôi đang tìm kiếm một cái gì đó như thế này:
ftp.login=(mylogin)
ftp.pass=(mypass)
Và bất kỳ thông tin đăng nhập nào khác.
Câu trả lời:
Sử dụng ftplib
, bạn có thể viết nó như thế này:
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()
Sử dụng ftplib.FTP_TLS
thay thế nếu máy chủ FTP của bạn yêu cầu TLS.
Để truy xuất nó, bạn có thể sử dụng urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
CHỈNH SỬA :
Để tìm ra thư mục hiện tại, hãy sử dụng FTP.pwd()
:
FTP.pwd (): Trả về tên đường dẫn của thư mục hiện tại trên máy chủ.
Để thay đổi thư mục, hãy sử dụng FTP.cwd(pathname)
:
FTP.cwd (tên đường dẫn): Đặt thư mục hiện tại trên máy chủ.
ftplib hiện hỗ trợ trình quản lý ngữ cảnh nên tôi đoán nó có thể dễ dàng hơn
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)
Không cần đóng tệp hoặc phiên
Rất có thể bạn sẽ muốn sử dụng mô-đun ftplib cho 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"
Điều này đăng nhập bạn vào một máy chủ FTP. Những gì bạn làm từ đó là tùy thuộc vào bạn. Câu hỏi của bạn không chỉ ra bất kỳ hoạt động nào khác thực sự cần thực hiện.
Thử đi:
#!/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
lỗi khi đi tuyến đường này trên ftp.
Tôi vừa trả lời một câu hỏi tương tự ở đây
IMHO, nếu máy chủ FTP của bạn có thể giao tiếp với Fabric, hãy cho chúng tôi biết Fabric. Nó tốt hơn nhiều so với làm thôftp
.
Tôi có tài khoản FTP từ dotgeek.com
đó nên tôi không chắc liệu điều này có hoạt động với các tài khoản FTP khác hay không.
#!/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')
lưu tệp dưới dạng fabfile.py
và chạy fab copy
cục bộ.
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.
Một lần nữa, nếu bạn không muốn nhập mật khẩu mọi lúc, chỉ cần thêm
env.password = 'my_password'
Để tránh gặp phải lỗi mã hóa, bạn cũng có thể thử các lệnh dưới đây
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 () đảm bảo rằng các kết nối của bạn được mã hóa
Bạn có thể sử dụng chức năng dưới đây. Tôi chưa thử nghiệm nó, nhưng nó sẽ hoạt động tốt. Hãy nhớ đích đến là một đường dẫn thư mục, nơi nguồn là đường dẫn tệp hoàn chỉnh.
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)
cái gì % f
?
print ftp.pwd()
sẽ hiển thị đường dẫn hiện tại mà bạn đang ở.