Python文件监听

运行环境:

本地:Window7 64位,Python 2.7.6,paramiko 1.12.1,watchdog 0.8.1

远端:Ubuntu 14.04,Openssh-server

from auto_ssh_upload_paramiko import SSHFileUpload

auto_ssh_upload_paramiko 模块参看[这里]

#!/usr/bin/python
# coding:utf8

import os
import os.path
import re
import sys
import time
import logging
from logging.handlers import TimedRotatingFileHandler
from ConfigParser import SafeConfigParser
from pathtools.patterns import match_any_paths
from watchdog.observers import Observer

from auto_ssh_upload_paramiko import SSHFileUpload
from dirs_handlers import RsyncRegexMatchingEventHandler, RsyncPatternMatchingEventHandler

def getSSHConfig(section_name=‘env‘, conf_file=‘ssh-config.ini‘):
    config = SafeConfigParser()
    config.readfp(open(conf_file))
    return dict(config.items(section_name))

CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0

_logLevelNames = {
    CRITICAL : ‘CRITICAL‘,
    ERROR : ‘ERROR‘,
    WARNING : ‘WARNING‘,
    INFO : ‘INFO‘,
    DEBUG : ‘DEBUG‘,
    NOTSET : ‘NOTSET‘,
    ‘CRITICAL‘ : CRITICAL,
    ‘ERROR‘ : ERROR,
    ‘WARN‘ : WARNING,
    ‘WARNING‘ : WARNING,
    ‘INFO‘ : INFO,
    ‘DEBUG‘ : DEBUG,
    ‘NOTSET‘ : NOTSET,
}

if __name__ == "__main__":
    config = getSSHConfig("env")
    log_path = config.get(‘log_path‘).replace(‘\\‘, ‘/‘).replace(‘//‘, ‘/‘)
    log_level = config.get(‘log_level‘)

    if not log_level: 
        log_level = _logLevelNames[‘INFO‘]

    formatter=‘%(asctime)s - %(message)s‘
    datefmt=‘%Y-%m-%d %H:%M:%S‘
    logging.basicConfig(
                        level=_logLevelNames[log_level]
                        ,format=formatter
                        ,datefmt=datefmt
                        # ,filename=log_path
                        # ,filemode=‘a‘
                        )

    fmt = logging.Formatter(formatter)
    log_handler = TimedRotatingFileHandler(log_path, when=‘D‘, interval=1, backupCount=40)
    log_handler.setLevel(logging.INFO)
    log_handler.suffix = r"%Y%m%d-%H%M.log"
    log_handler.setFormatter(fmt)
    logging.getLogger().addHandler(log_handler)

    host = config.get(‘host‘)
    port = int(config.get(‘port‘))
    username = config.get(‘username‘)
    password = config.get(‘password‘)
    
    local_path =  config.get(‘local_path‘)#"E:/pyworkspace/pycode/watchdog"
    remote_path = config.get(‘remote_path‘)#"/home/trevor/python_files"

    # ignore_file = ""
    # if config.get(‘ignore_file‘):
    #     ignore_file = config.get(‘ignore_file‘)
    # else:
    #     ignore_file = os.path.join(local_path, ".gitignore")

    # ignore_patterns = []
    # if not ignore_file:
    #     with open(ignore_file.replace("\\", "/")) as f:
    #         ignore_patterns = set([ os.path.join(local_path, ps.strip("\n")) + "*" for ps in f.xreadlines() if ps and (‘\n‘ != ps)])

    ssh = SSHFileUpload(host, port, username, password)

    # event_handler = RsyncPatternMatchingEventHandler(ssh, local_path, remote_path, ignore_patterns=ignore_patterns)
    event_handler = RsyncRegexMatchingEventHandler(ssh, local_path, remote_path, 
        ignore_regexes=[r".*\.tmp$", r".*\.git.*", r".*\.settings.*", r".*\.project.*", r".*\.buildpath.*"])
    observer = Observer()
    observer.schedule(event_handler, local_path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

配置文件:

[env]
host=192.168.88.128
port=22
username=root
password=your_passwd
local_path=E:/app
remote_path=/home/app
log_path=./dirs-rsync.log
时间: 2024-07-28 16:56:53

Python文件监听的相关文章

python hook监听事件

python hook监听事件 作者:vpoet 日期:夏季 # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ # import pythoncom import pyHook def onMouseEvent(event): # 监听鼠标事件 print "MessageName:",event.MessageName print "Message:", event.Message print "T

调用系统下载服务下载文件。监听下载完成拿到downloadid和filename

public class DownLoadAPK { @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static long downloadAPK(DownloadManager downloadManager, String apkUrl, String name, String desc){ DownloadManager.Request request = new DownloadManager.Request(Uri.parse(apk

Java可以如何实现文件的监听

应用中使用logback作为日志输出组件的话,大部分会去配置 logback.xml 这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级别,不用重启应用就可以生效 那么,这个功能是怎么实现的呢?应用中使用logback作为日志输出组件的话,大部分会去配置 logback.xml 这个文件,而且生产环境下,直接去修改logback.xml文件中的日志级别,不用重启应用就可以生效 那么,这个功能是怎么实现的呢? I. 问题描述及分析 针对上面的这个问题,首先抛出一个实际的cas

Rsync+Inotify实时监听备份

说明,下面的inotify是建立在rsync的配置过程 大前提是rsync daemon 配置成功,rsync配置看上一遍博文,在客户端可以推拉数据,然后才能配置inotify服务----inotify是在客户端安装,监听需要备份的目录,然后推送到服务端 查看当前系统是否支持inotify [[email protected] bier]# uname -r 2.6.32-431.el6.i686 [[email protected] bier]# ls -l /proc/sys/fs/inot

使用path监听指定文件系统的变化

在以前的JAVA版本中,如果程序需要检测文件的变化,那么需要开辟一个线程每隔一段时间去遍历一次指定的目录,如果发现此次遍历结果和上次不同,那么就认为文件变动了 ,这样的方式非常繁琐,JAVA 7之后的NIO.2 Path类提供了一个方法来监听指定文件目录内文件的变化状态. 1.获取文件系统的WatchService对 2.使用Path类的方法去注册一个监听,指定监听文件的哪些状态,如新增.修改.删除. package com.nio2; import java.io.IOException;im

Linux下修改Oracle监听地址

如果你的服务器换了ip怎么办? 如果你的服务器换了名字怎么办? 以前的小伙伴怎么办? 以前的老客户怎么办? 没关系,简单教你修改监听地址,老朋友随便找! 想要修改监听地址首先要找到两个文件,确定两样东西! 第一 你的主机名字? 第二 你的IP地址? 第三 你的listener.ora在哪里? 第四 你的tnsnames.ora在哪里? 原来的文件监听的是localhost,这个名字在/etc/hosts中会被映射成Ip地址127.0.0.1 lisenter.ora 目录在 /opt/oracl

Python黑客编程基础3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

使用python监听、模拟鼠标键盘事件

最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容易. 士兵76长按左键扫射4发子弹之后准星就会小范围随机飘,所以想自己实现一个长按左键变自动点射的程序. 仅作测试使用,鄙视一切外挂,玩游戏就好好玩. 选择使用python,用到的库pyHook,pywin32 pyHook的文档:http://pyhook.sourceforge.net/doc_

Python黑客编程3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: ?      操作系统:kali Linux 2.0 ?      编程工具:Wing IDE ?      Python版本:2.7.9 ?      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下