最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去;其中部分脚本涉及到对samaba的操作,先后尝试了pysmbfs.smbfspysmbclient

pysmb

 安装:sudo pip2 install pysmb

使用

from smb.SMBConnection import *
class SMBClient(object):
'''
smb连接客户端
'''
user_name = ''
passwd = ''
ip = ''
prot = None status = False
samba = None def __init__(self, user_name, passwd, ip, port=139):
self.user_name = user_name
self.passwd = passwd
self.ip = ip
self.port = port def connect(self):
try:
self.samba = SMBConnection(self.user_name, self.passwd, '', '', use_ntlm_v2=True)
self.samba.connect(self.ip, self.port)
self.status = self.samba.auth_result
except:
self.samba.close() def disconnect(self):
if self.status:
self.samba.close() def all_file_names_in_dir(self, service_name, dir_name):
'''
列出文件夹内所有文件名
:param service_name:
:param dir_name:
:return:
'''
f_names = list()
for e in self.samba.listPath(service_name, dir_name):
if len(e.filename) > 3:
f_names.append(e.filename)
return f_names def download(self, f_names, service_name, smb_dir, local_dir):
'''
下载文件
:param f_names:文件名
:param service_name:服务名(smb中的文件夹名)
:param smb_dir: smb文件夹
:param local_dir: 本地文件夹
:return:
'''
assert isinstance(f_names, list)
for f_name in f_names:
f = open(os.path.join(local_dir, f_name), 'w')
self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f)
f.close()

优缺点:函数功能丰富,文件下载功能只对普通文件如txt,dat,csv有效,压缩文件无效

fs.smbfs

 安装:sudo pip2 install fs.smbfs

使用

    import fs.smbfs
smb = fs.smbfs.SMBFS(host='****', username='****', passwd='***')
smb.opendir('***')
for e in smb.listdir():
print e
smb.close()

 优缺点:host属性中直接输入ip无效,报错fs.errors.CreateFailed: could not get IP/host pair from '*.*.*.193',包的作者目前也没有解决这个问题。

pysmbclient

安装:sudo pip2 install pysmbclient

使用:

    import smbclient

    smb = smbclient.SambaClient(server='*.*.*.103', username=u'***', password='***', share=u'数据共享/')
for e in smb.listdir(u'/'):
smb.download(os.path.join(u'/', e), os.path.join('~/smb', e))
smb.close()

优缺点:可以完成普通文件和压缩文件从samba下载到本地

python操作samba的更多相关文章

  1. Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy

    本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...

  2. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  3. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  4. Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  5. Python操作Mysql之基本操作

    pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...

  6. Python操作RabbitMQ

    RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...

  7. python操作日期和时间的方法

    不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...

  8. Python—操作redis

    Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...

  9. python成长之路【第十三篇】:Python操作MySQL之pymysql

    对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...

随机推荐

  1. 2018年-2019年第二学期第五周C#学习个人总结

    在本周我学习了第五章面向对象高级中的5.3多态,5.3多态中主要包括重写父类方法,多态的实现,base关键字,里氏转换原则,Object类.在重写父类方法中要求当重写父类的方法时,要求子类的方法名,参 ...

  2. gitlab 存储仓库目录设置及数据迁移

    注:一开始没有考虑到把gitlab划分好存储目录,占用系统磁盘,由于gitlab是默认安装的,随着公司代码越来越多,导致gitlab数据目录空间不足 磁盘空间: [root@gitlab ~]# df ...

  3. Introducation of Servlet filter(servlet过滤器介绍 )

    本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...

  4. MySQL数据库的sql语句的导出与导入

    1.MySQL数据库的导出 (1)选择对应的数据库 (2)点击右键选择Dump SQL File (3)会出现保存框,选择保存的位置,名称不建议重新起名 (4)点击保存出现 (5)点击Close就可以 ...

  5. appium-android 遇到swipe函数无法使用的问题及解决办法

    问题:cannot resolve method swipe() 问题出现原因:File->Project Structure->Modules->Dependencies-> ...

  6. java解压多层目录中多个压缩文件和处理压缩文件中有内层目录的情况

    代码: package com.xiaobai; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...

  7. Python3学习笔记----生成器

    生成器的作用 生成器可以在循环的过程中推算出后续的元素,不必创建完整的list,从而节省大量空间. 生成器的创建 1.把一个列表生成式的 [ ] 改写为( ) # -*- coding: UTF-8 ...

  8. python中模块的__all__详细使用

    python模块中的__all__,用于模块导入时限制,如:from module import * 此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入:若没 ...

  9. webpack-dev-server的执行逻辑

    1.运行npm i webpack-dev-server -D 把工具安装到项目的本地开发依赖 2.改工具用法跟webpack的用法完全一样:package.json中增加配置,直接用npm run ...

  10. CentOS yum换源

    1.备份系统自带yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.进入yum源配 ...