python操作samba
最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去;其中部分脚本涉及到对samaba的操作,先后尝试了pysmb、fs.smbfs、pysmbclient
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的更多相关文章
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python操作Mysql之基本操作
pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...
- Python操作RabbitMQ
RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...
- python操作日期和时间的方法
不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...
- Python—操作redis
Python操作redis 连接方式:点击 1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建, ...
- python成长之路【第十三篇】:Python操作MySQL之pymysql
对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...
随机推荐
- MySQL:Download Connector/Python
MySQL Connector / Python是用于Python平台和开发的标准化数据库驱动程序. 此外,MySQL Connector / Python 8.0支持使用MySQL Server 8 ...
- ES6中的类和继承
class的写法及继承 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子 function Point(x, y) { this.x = x; this. ...
- 某大公司的sql面试题
问:关系模式:User(userId, userName), Article(articleId, userId, title, content),Vote(articleId, score),U ...
- 2019-4-23 plan
需要制作springcloud es6的技术文档和demo
- 目标指定法——S.M.A.R.T.
一个有效的目标一定要是 具体的(Specific), 可测量的(Measureable), 可实现的(Attainable), 有现实意义的(Realistic), 以及有明确期限的(Time-bas ...
- js基础语句
// for 循环语句 // if else 条件判断语句 // switch 条件循环语句 // while // do while // 这里的 i 是循环变量 一般初始值为0,因为下标从0开始 ...
- jquery AJAX数据传输路径写法~
$.post('{:url("index/index/logininfo")}',{'username':name,'password':pwd},function(data){ ...
- spring+springmvc+hibernate 整合
三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...
- iOS权限申请
<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...
- jmockit mock 类的static 属性
final Object[] originValue = new Object[1];try{ new Expectations(XXStatic.class){ { originValue[0] = ...