У меня есть код для загрузки файлов из удаленного каталога в локальный каталог с помощью python. Мне нужен код, который может загружать один файл из удаленного каталога в локальную папку. Пожалуйста, помогите мне изменить этот код. Все предложения приветствуются. Я протестировал этот код, но он загружает все содержимое удаленного каталога в локальный каталог, но мне нужен код, который может загружать один файл из удаленного каталога в локальный. Я использую SFTP-сервер
код, который я получил: (на основе Python pysftp get_r из Linux отлично работает в Linux, но не в Windows)
import os
import pysftp
from stat import S_IMODE, S_ISDIR, S_ISREG
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection('192.168.X.X', username='username',password='password',cnopts=cnopts)
def get_r_portable(sftp, remotedir, localdir, preserve_mtime=False):
for entry in sftp.listdir(remotedir):
remotepath = remotedir + "/" + entry
localpath = os.path.join(localdir, entry)
mode = sftp.stat(remotepath).st_mode
if S_ISDIR(mode):
try:
os.mkdir(localpath,mode=777)
except OSError:
pass
get_r_portable(sftp, remotepath, localpath, preserve_mtime)
elif S_ISREG(mode):
sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)
remote_path=input("enter the remote_path: ")
local_path=input("enter the local_path: ")
get_r_portable(sftp, remote_path, local_path, preserve_mtime=False)
если вам удобно, можете ли вы изменить код @TonyJafar. я новичок в питоне
import os
import pysftp
from stat import S_IMODE, S_ISDIR, S_ISREG
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection('192.168.X.X', username='username',password='password',cnopts=cnopts)
def get_r_portable(sftp, remotedir, remotefile, localdir, preserve_mtime=False):
remotepath = remotedir + "/" + remotefile
localpath = os.path.join(localdir, remotefile)
mode = sftp.stat(remotepath).st_mode
if S_ISDIR(mode):
try:
os.mkdir(localpath,mode=777)
except OSError:
pass
get_r_portable(sftp, remotepath, localpath, preserve_mtime)
elif S_ISREG(mode):
sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)
remote_path=input("enter the remote_path: ")
remote_file=input("enter the remote file: ")
local_path=input("enter the local_path: ")
get_r_portable(sftp, remote_path, remote_file, local_path, preserve_mtime=False)
Я пытался использовать это решение для своих нужд, и я продолжаю получать «SSHException: соединение с сервером разорвано:» Пробовал канал = sftp.sftp_client.get_channel() channel.lock.acquire() channel.default_max_packet_size=paramiko.common.DEFAULT_MAX_ PACKET_SIZE, channel.out_window_size=paramiko.common.MAX_WINDOW_SIZE channel.transport.packetizer.REKEY_BYTES = pow(2, 40) # Максимум 1 ТБ, это снижение безопасности! channel.transport.packetizer.REKEY_PACKETS = pow(2, 40) channel.lock.release()" но ничего не работает - помогите пожалуйста?
вам нужно удалить
for entry in sftp.listdir(remotedir)
и просто использоватьsftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)