python 实现从服务器下载文件
创始人
2025-01-18 08:02:55
0

python 实现从服务器下载文件

文章目录

  • python 实现从服务器下载文件
    • 1、使用python paramiko库
    • 2、使用Python wget库
    • 3、使用Python urllib库
    • 4、使用subprocess.run()执行scp命令
    • 5、使用os.system() 执行scp命令

通过python编程,实现从服务器下载文件方法有很多,这里列举常用的几种方法:

  • 使用python paramiko库

  • 使用python wget库

  • 使用python urllib库

  • 使用subprocess.run()执行scp命令

  • 使用os.system() 执行scp命令

1、使用python paramiko库

 import inspect import paramiko  remote_ip = "192.168.3.211"  remote_port = 22  remote_username = "root"  remote_password = "123456"  print(f"Line {inspect.currentframe().f_lineno}: username: {remote_username}, password: {remote_password}")  # 创建SSHClient对象 ssh = paramiko.SSHClient()  # 允许连接不在known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 连接到远程服务器 ssh.connect(hostname=remote_ip, username=remote_username, password=remote_password)  sftp = ssh.open_sftp()  filename = "main.txt"  print(f'Line {inspect.currentframe().f_lineno}: 正在下载文件...') sftp.get("/home/main.txt", filename)  sftp.close() ssh.close()  print(f"Line {inspect.currentframe().f_lineno}: 下载完成") 

2、使用Python wget库

Python的wget库是一个用于下载文件的库,支持从FTP服务器上下载文件。使用Python wget库下载文件的步骤如下:

1.安装wget库

pip install wget 

2.下载文件

import wget  url = "ftp://username:password@ftp.example.com/data/example.txt"  filename = wget.download(url) 

3、使用Python urllib库

Python的urllib库可以用于下载文件,包括从FTP服务器上下载文件。使用Python urllib库下载文件的步骤如下:

1.导入urllib库

import urllib.request 

2.创建FTP URL

url = "ftp://username:password@ftp.example.com/data/example.txt" 

3.下载文件

filename = "example.txt"  urllib.request.urlretrieve(url, filename) 

4、使用subprocess.run()执行scp命令

import os import sys import inspect import paramiko import subprocess  remote_ip = "192.168.11.234" remote_port = 22  remote_username = "root"  remote_password = "123456"  # 创建SSHClient对象 ssh = paramiko.SSHClient()  # 允许连接不在known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 连接到远程服务器 ssh.connect(hostname=remote_ip, username=remote_username, password=remote_password)   # 输入本地文件的路径,并且判断是否存在 while True:     local_folder = input('请输入保存到本地的路径: ./\n')     # 判断文件是否存在     if os.path.exists(local_folder):         break  # 如果文件存在,则跳出循环     else:         print('\033[31m' +               f'文件 {local_folder} 不存在,请重新输入。' + '\033[0m')  local_folder = r"{}".format(local_folder) remote_folder = input('请输入远程服务器端下载的文件的路径: '                       'home/main.txt \n')  try:     print('正在下载文件...')      print(f"Line {inspect.currentframe().f_lineno}: username  : {ssh.get_transport().get_username()}")     print(f"Line {inspect.currentframe().f_lineno}: host_ip   : {ssh.get_transport().getpeername()[0]}")     print(f"Line {inspect.currentframe().f_lineno}: host_port : {ssh.get_transport().getpeername()[1]}")      # 要传输的文件路径     local_file_path = local_folder     remote_file_path = remote_folder      # 执行scp命令     result = subprocess.run(['scp', f'{ssh.get_transport().get_username()}@{ssh.get_transport().getpeername()[0]}:{remote_file_path}', local_file_path])     # result = subprocess.run(['scp', local_file_path, f'{ssh.get_transport().get_username()}@{ssh.get_transport().getpeername()[0]}:{remote_file_path}'])     print(f"Line {inspect.currentframe().f_lineno}: 输出结果为, result : ", result)     # print(f"Line {inspect.currentframe().f_lineno}: 输出结果为, result.decode() :", result.decode())  except Exception as e:     print('func:{}(),line:{},'.format(sys._getframe().f_code.co_name, sys._getframe().f_lineno), end="")     print('\033[31m' + f'文件下载失败,报错信息为: {e}' + '\033[0m') 

5、使用os.system() 执行scp命令

import os import sys import inspect import paramiko import subprocess  remote_ip = "192.168.3.234"  remote_port = 22   remote_username = "root"   remote_password = "123456"  # 创建SSHClient对象 ssh = paramiko.SSHClient()  # 允许连接不在known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 连接到远程服务器 ssh.connect(hostname=remote_ip, username=remote_username, password=remote_password)   # 输入本地文件的路径,并且判断是否存在 while True:     local_folder = input('请输入保存到本地的路径: ./\n')     # 判断文件是否存在     if os.path.exists(local_folder):         break  # 如果文件存在,则跳出循环     else:         print('\033[31m' +               f'文件 {local_folder} 不存在,请重新输入。' + '\033[0m')  local_folder = r"{}".format(local_folder) remote_folder = input('请输入远程服务器端下载的文件的路径: '                       '/home/main.txt \n')  try:     print('正在下载文件...')      print(f"Line {inspect.currentframe().f_lineno}: username  : {ssh.get_transport().get_username()}")     print(f"Line {inspect.currentframe().f_lineno}: host_ip   : {ssh.get_transport().getpeername()[0]}")     print(f"Line {inspect.currentframe().f_lineno}: host_port : {ssh.get_transport().getpeername()[1]}")      # 要传输的文件路径     local_file_path = local_folder     remote_file_path = remote_folder      # 执行scp命令     result = subprocess.run(['scp', f'{ssh.get_transport().get_username()}@{ssh.get_transport().getpeername()[0]}:{remote_file_path}', local_file_path])     # result = subprocess.run(['scp', local_file_path, f'{ssh.get_transport().get_username()}@{ssh.get_transport().getpeername()[0]}:{remote_file_path}'])     print(f"Line {inspect.currentframe().f_lineno}: 输出结果为, result : ", result)     # print(f"Line {inspect.currentframe().f_lineno}: 输出结果为, result.decode() :", result.decode())  except Exception as e:     print('func:{}(),line:{},'.format(sys._getframe().f_code.co_name, sys._getframe().f_lineno), end="")     print('\033[31m' + f'文件下载失败,报错信息为: {e}' + '\033[0m')  

相关内容

热门资讯

四分钟模拟器!(德扑之星)确实... 四分钟模拟器!(德扑之星)确实有挂是有猫腻,德扑之星2021已更新,详细教程(有挂技巧)-哔哩哔哩;...
两分钟针对!(一起跑得快)外挂... 两分钟针对!(一起跑得快)外挂透视辅助挂,Wepoke安卓版本原来是有挂详细教程(有挂教学)-哔哩哔...
十分钟实锤!(天天畅玩德州)原... 十分钟实锤!(天天畅玩德州)原来确实是有挂,Wepoke中牌率确实是有挂猫腻,详细教程(真的有挂)-...
两分钟分钟!Wepoke最新款... 两分钟分钟!Wepoke最新款是有挂猫腻吗,Wepoke透视其实一直都是有挂,详细教程(2025已更...
5分钟AI!(wpk网页版)是... 5分钟AI!(wpk网页版)是有挂猫腻吗,Wepoke后台2024已更新,详细教程(有挂头条)-哔哩...
八分钟AI!(欢乐风暴)确实有... 八分钟AI!(欢乐风暴)确实有挂辅助挂吗,欢乐风暴2024已更新,详细教程(有挂攻略)-哔哩哔哩是一...
七分钟软件!(WPK线上)是有... 七分钟软件!(WPK线上)是有挂辅助挂吗,wEpoke原来一直总是有挂,详细教程(有挂解惑)-哔哩哔...
8分钟靠谱!(小乐休闲)外挂透... 您好,小乐休闲这款游戏可以开挂的,确实是有挂的,需要了解加微【841106723】很多玩家在这款游戏...
1分钟打法!(灵心大厅)原来是... 1分钟打法!(灵心大厅)原来是真的有挂,灵心大厅2021已更新,详细教程(真实有挂)-哔哩哔哩;AI...
7分钟分钟!wpk后台真的是有... 7分钟分钟!wpk后台真的是有挂吗,哈糖大菠萝其实真的是有挂,详细教程(2025已更新)(哔哩哔哩)...