首页 > 系统相关 >python在Linux环境下访问Windows共享目录

python在Linux环境下访问Windows共享目录

时间:2024-05-23 09:08:04浏览次数:29  
标签:python ip server Windows file Linux path password data

1.smbprotocol 

不推荐,偶然会出现 "SMB socket was closed, cannot send or receive any more data" 的异常。

pip install smbprotocol 

实现代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from smbclient import open_file, register_session, delete_session

#共享目录:\\192.168.0.1\sharedic\business\date\test.txt
#filePath = "\\192.168.0.1\sharedic\business\date\test.txt"

def get_file_from_share(file_path):
    """
    从共享目录中获取文件内容。

    参数:
    filePath: 字符串,指定的文件路径,包括服务器IP和共享目录下的文件路径。

    返回值:
    bytes,文件的内容。
    """
    # 获取共享目录名称:sharedic
    shared_folder = file_path.lstrip('\\').split('\\')[1]
    server_ip = '192.168.0.1'
    username = 'username'
    password = 'password'
    # 使用提供的服务器IP、用户名和密码注册会话
    register_session(server_ip, username=username, password=password)
    remote_file_path = file_path.lstrip('\\').replace(server_ip + "\\" , "").replace("\\", "/")
    try:
        # 尝试打开并读取文件内容
        with open_file(f"/{server_ip}/{remote_file_path}", mode='rb') as file:
            text_content = file.read()
            return text_content
    except Exception as e:
        raise e
    finally:
        # 不论是否发生异常,最后都注销会话
        delete_session(server_ip)

 

2.pysmb

pip install pysmb

实现代码:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import io
import platform
from smb.SMBConnection import SMBConnection

#共享目录:\\192.168.0.1\sharedic\business\date\test.txt
#filePath = "\\192.168.0.1\sharedic\business\date\test.txt"

def get_file_from_share(file_path):
    """
    从通过 SMB 共享的服务器上获取文件。

    参数:
    - filePath: 字符串,指定的文件路径,包括服务器IP和共享文件夹内的路径。

    返回值:
    - stream_data: io.BytesIO 对象,包含从服务器检索到的文件内容。
    """
    # 提取共享文件夹名称
    shared_folder = file_path.lstrip('\\').split('\\')[1]
    # SMB连接的配置:服务器IP、用户名、密码
    server_ip = '192.168.0.1'
    username = 'username'
    password = 'password'
    # 建立SMB连接
    conn = SMBConnection(
        username,
        password,
        platform.uname().node,
        server_ip,
        domain='WORKGROUP',
        use_ntlm_v2=True,
        is_direct_tcp=True)
    try:
        conn.connect(server_ip, 445)  # 连接到服务器的SMB服务
        # 格式化远程文件路径,用于后续的文件检索
        remote_file_path = file_path.lstrip('\\').replace(server_ip + "\\" + shared_folder, "").replace("\\", "/")
        stream_data = io.BytesIO()  # 创建一个内存中的文件对象
        conn.retrieveFile(shared_folder, f"{remote_file_path}", stream_data)  # 从服务器下载文件到stream_data
        stream_data.seek(0)  # 重置stream_data的读取位置到文件开头
        return stream_data
    except Exception as e:
        raise e  # 如果发生异常,向上抛出
    finally:
        conn.close()  # 确保在函数退出前关闭SMB连接

 

标签:python,ip,server,Windows,file,Linux,path,password,data
From: https://www.cnblogs.com/yellow3gold/p/18207547

相关文章

  • Windows 电源管理BUG--2024年5月22日了解
    目录注意:笔记本电脑一定不能拔电后长时间休眠,特别是11系统!!Win11休眠后的电源管理有bug,会将你的电池彻底用到激活电压以下,很有可能导致电池锁定(只能通过特定设备激活解锁).你的电脑就会永远进入0%电池状态,电池只能通过更换或激活(没有那个设备)才能恢复充电功能.问......
  • linux核心基础-用户管理
    一、linux用户管理前言1、linux用户信息配置文件/etc/passwd2、/etc/passwd字段信息解释3、其余用户,组相关配置文件/etc/passwd用户信息/etc/shadow用户密码信息/etc/group用户组信息/etc/gshadow用户组密码信息,在大公司,用户和组数量很大的情况下,需要制定复杂的......
  • WPF多显示器问题 - WindowState
    标签 wpf multiple-monitors一段时间以来,我一直试图让我的WPF应用程序跨越多个监视器,并且几乎可以正常工作。当我设置以下行时,问题似乎出现了:win1.WindowState=WindowState.Maximized这会导致应用程序仅跨越主屏幕。我的代码如下:publicpartialclassApp:App......
  • MinGW -- Minimalist GNU for Windows
    MinGW,是MinimalistGNUforWindows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(CRuntime)库。MinGW是一组包含文件和端口库,其功能是允许控制台模式的程序使......
  • Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务
    一、背景描述在Windows环境下进行日常的项目开发过程中,有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行(没有用户登陆,服务在开机后也可以照常运行)、且对于那些没有用户交互界面的exe程序来说只要在后台运行即可,无需在桌面显示该exe程序窗口内容、无......
  • Python可视化训练
    Python可视化训练一实验目的l 使学生综合运用图形用户界面设计的概念;l 使学生熟悉使用中间面板,组成层次复杂的GUI界面;l 使学生掌握Python图形绘制和图像处理步骤与方法;l 使学生掌握Python可视化处理的步骤、方法与编程;二实验环境及实验准备l 所需硬件环境为微机;l ......
  • 2022-07-03-含有非期望产出的sbm模型python代码
    传统的径向DEA模型无法考虑“松弛变量”对效率值的影响,也没有考虑同时使期望产出增加,非期望产出减少的技术变化,以此度量的效率值是不准确或有偏的,为了解决这一问题,Tone(2001)提出了基于投入产出松弛变量的环境效率评价模型,简称SBM模型,在此基础上,他进一步提出了SBM的拓展模型,从而实......
  • 《Linux内核完全注释》学习笔记:2.4 Linux内核进程控制
    程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理:把CPU的运行时间划分成一个个规定长度的时间片(timeslice),让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序......
  • 在Linux中,RAID级别有哪些?
    RAID(RedundantArrayofIndependentDisks,独立磁盘冗余阵列)是一种将多个磁盘驱动器组合成一个逻辑单元的数据存储虚拟化技术,用于提高数据的可靠性、性能和/或容量。RAID有多种级别,每种级别都有其特定的性能、可靠性和成本效益。以下是一些常见的RAID级别:1.RAID0(条带化)特点:将......
  • 在Linux中,如何查看网络接口的状态?
    在Linux中,查看网络接口的状态可以使用多种命令和工具,这些工具提供了接口的配置、活动状态、统计信息等。以下是一些常用的方法:1.ifconfig命令ifconfig(网络接口配置)是一个传统的命令行工具,用于显示和配置网络接口。ifconfig或者,查看特定接口的状态:ifconfiginterface_name......