import watchdog
import datetime
from PIL import Image
import signal
import sys
def on_change(event):
if event.is_directory:
return
file_path = event.src_path
file_mtime = datetime.datetime.fromtimestamp(event.modified)
print(f'File Modified: {file_path}')
print(f'File Modified Time: {file_mtime}')
# 读取图片文件内容
with open(file_path, 'rb') as image_file:
image_data = image_file.read()
# 生成 HTML 图像元素
image_element = f'<img src="data:image/png;base64,{image_data.decode("utf-8")}" alt="{file_mtime}">'
# 将图像元素添加到 HTML 输出中
html_output += f'<p>File Modified: {event.src_path}</p><p>File Modified Time: {event.modified}</p>{image_element}'
html_output += '</body></html>'
# 处理 SIGINT 信号
def signal_handler(signalnum, handler):
if signalnum == signal.SIGINT:
print("收到 CTRL+C,退出监听")
watchdog_object.stop()
sys.exit(1)
# 设置要监听的目录
watchdog_path = '/var/img/'
# 创建一个 watchdog 对象并添加监听目录
watchdog_object = watchdog.observers.Watchdog(watchdog_path)
# 处理 SIGINT 信号
signal.signal(signal.SIGINT, signal_handler)
while True:
watchdog_object.observe(on_change) # 开始监听目录
# 输出 HTML 格式的文件修改时间信息
with open('file_modified_time.html', 'w') as html_file:
html_file.write(html_output)from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
import os
from datetime import datetime
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if event.is_directory:
return None
if event.event_type == 'modified':
# 获取文件修改时间
timestamp = os.path.getmtime(event.src_path)
modify_time = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
# 获取相对路径
relative_path = os.path.relpath(event.src_path, '/var/img')
# 生成HTML文件
with open('/var/www/img.html', 'w') as f:
f.write(f'<img src="{relative_path}" alt="Image"><p>{modify_time}</p>')
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path='/var/img', recursive=False)
observer.start()
while True:
try:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
break
observer.join()from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
import os
from datetime import datetime
import threading
from bottle import route, run, response, ServerAdapter, static_file
# 可配置的变量
image_dir = '/var/www/img'
web_root_dir = '/var/www'
httphost = '0.0.0.0'
httpport = 8080
#index.html页面放入内存中
html_content = ''
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
global html_content
if event.is_directory:
return None
if event.event_type == 'modified':
# 添加延迟
time.sleep(5)
# 获取文件修改时间
timestamp = os.path.getmtime(event.src_path)
modify_time = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
# 获取相对路径
relative_path = os.path.relpath(event.src_path, image_dir)
# 重新计算图片文件的相对路径
static_path = os.path.join('static', relative_path)
# 生成HTML内容
html_content = f'<img src="/{static_path}" alt="Image"><p>{modify_time}</p>'
@route('/')
def index():
response.content_type = 'text/html'
return html_content
@route('/static/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root=web_root_dir)
class StoppableServer(ServerAdapter):
def run(self, handler):
from wsgiref.simple_server import make_server, WSGIRequestHandler
if self.quiet:
class QuietHandler(WSGIRequestHandler):
def log_request(*args, **kw): pass
self.options['handler_class'] = QuietHandler
self.server = make_server(self.host, self.port, handler, **self.options)
self.server.serve_forever()
def stop(self):
self.server.shutdown()
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=image_dir, recursive=False)
observer.start()
# 在一个新的线程中运行Bottle服务器
server = StoppableServer(host=httphost, port=httpport)
threading.Thread(target=lambda: run(server=server)).start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
server.stop()
observer.join()[Unit] Description=Web Server for Pictures After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/websrvpic.py Restart=always User=username Group=groupname Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
import os
from datetime import datetime
import threading
from bottle import route, run, response, ServerAdapter, static_file
# 可配置的变量
image_dir = os.path.expanduser('~/www/img')
web_root_dir = os.path.expanduser('~/www')
httphost = '0.0.0.0'
httpport = 8080
# index.html页面放入内存中
html_content = ''
def gen_html(srcpath):
global html_content
# 获取文件修改时间
timestamp = os.path.getmtime(srcpath)
modify_time = datetime.fromtimestamp(
timestamp).strftime('%Y-%m-%d %H:%M:%S')
# 获取相对路径
relative_path = os.path.relpath(srcpath, web_root_dir)
# 重新计算图片文件的相对路径
static_path = os.path.join('static', relative_path)
# 生成HTML内容
html_content = f'''<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
</head>
<img src="/{static_path}?t={int(time.time())}" alt="Image"><p>{modify_time}</p>'''
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
global html_content
if event.is_directory:
return None
if event.event_type == 'modified':
gen_html(event.src_path)
@route('/')
def index():
global html_content
print(html_content)
response.content_type = 'text/html'
return html_content
@route('/static/<filepath:path>')
def server_static(filepath):
return static_file(filepath, root=web_root_dir)
class StoppableServer(ServerAdapter):
def run(self, handler):
from wsgiref.simple_server import make_server, WSGIRequestHandler
if self.quiet:
class QuietHandler(WSGIRequestHandler):
def log_request(*args, **kw): pass
self.options['handler_class'] = QuietHandler
self.server = make_server(
self.host, self.port, handler, **self.options)
self.server.serve_forever()
def stop(self):
self.server.shutdown()
# 初始化页面,picture.jpg文件需存在
gen_html(f'{image_dir}/picture.jpg')
print(html_content)
# 启动文件监听
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=image_dir, recursive=False)
observer.start()
# 在一个新的线程中运行Bottle服务器
server = StoppableServer(host=httphost, port=httpport)
threading.Thread(target=lambda: run(server=server)).start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
server.stop()
observer.join()