Найти - Пользователи
Полная версия: Не выполняется часть кода отвечающая за слежение за изменениями в папке.
Начало » Python для новичков » Не выполняется часть кода отвечающая за слежение за изменениями в папке.
1
kolyaya
Добрый день.
Система Windows10
Python 3.8.5

Пытаюсь объеденить две программы, нужно что бы бот при появлении нового файла в папке отправлял его содержимого в телеграмм.
При таком коде не выполняется часть кода отвечающая за слежение за изменениями в папке.

 import telebot
import config
import random
from telebot import types
import sys
import time
#import logging
from watchdog.observers import Observer
#from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler
bot = telebot.TeleBot(config.TOKEN)
with open("test.txt") as file:
    rline = file.read()
@bot.message_handler(content_types=['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text == '🎲 Рандомное число':
            bot.send_message(message.chat.id, str(rline))
        elif message.text == '😊 Как дела?':
 
            markup = types.InlineKeyboardMarkup(row_width=2)
            item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
            item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')
 
            markup.add(item1, item2)
 
            bot.send_message(message.chat.id, 'Отлично, сам как?', reply_markup=markup)
        else:
            bot.send_message(message.chat.id, 'Я не знаю что ответить 😢')
 
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько 😊')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает 😢')
 
            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="😊 Как дела?",
                reply_markup=None)
 
            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")
    except Exception as e:
        print(repr(e))
# RUN
bot.polling(none_stop=True)
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        bot.send_message(message.chat.id, str(rline))
    
    # вызывается на событие модификации файла или директории
    def on_modified(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие удаления файла или директории
    def on_deleted(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие перемещения\переименования файла или директории
    def on_moved(self, event):
        print(event.event_type,event.src_path,event.dest_path)
 
 
if __name__ == "__main__":
    #logging.basicConfig(level=logging.INFO,
    #                    format='%(asctime)s - %(message)s',
    #                    datefmt='%Y-%m-%d %H:%M:%S')
    
    path = r"C:\Work\export" # отслеживаемая директория с нужным файлом
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
FishHook
 @bot.callback_query_handler(func=lambda call: True)  # !!!!!
def callback_inline(call):
    try:
        if call.message:
            if call.data == 'good':
                bot.send_message(call.message.chat.id, 'Вот и отличненько 😊')
            elif call.data == 'bad':
                bot.send_message(call.message.chat.id, 'Бывает 😢')
 
            # remove inline buttons
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="😊 Как дела?",
                reply_markup=None)
 
            # show alert
            bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
                text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")
    except Exception as e:
        print(repr(e))
# RUN
bot.polling(none_stop=True)  # !!!!!
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        bot.send_message(message.chat.id, str(rline))
    
    # вызывается на событие модификации файла или директории
    def on_modified(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие удаления файла или директории
    def on_deleted(self, event):
        print(event.event_type,event.src_path)
    
    # вызывается на событие перемещения\переименования файла или директории
    def on_moved(self, event):
        print(event.event_type,event.src_path,event.dest_path)

Я пометил две строки знаками # !!!!!
попытайтесь найти отличие
kolyaya
Переписал код под себя
 import telebot
import config
import sys
import time
#import logging
from watchdog.observers import Observer
#from watchdog.events import LoggingEventHandler
from watchdog.events import FileSystemEventHandler
bot = telebot.TeleBot(config.TOKEN)
#with open("test.txt") as file:
#    rline = file.read()
class EventHandler(FileSystemEventHandler):
    # вызывается на событие создания файла или директории
    def on_created(self, event):
        nfile = event.src_path
        #nfile = nfile.replace('\\\\','\\')
        with open(nfile, "r") as file:
            rline = file.read()
        print(str)
        bot.send_message(id, rline)
if __name__ == "__main__":
    #logging.basicConfig(level=logging.INFO,
    #                    format='%(asctime)s - %(message)s',
    #                    datefmt='%Y-%m-%d %H:%M:%S')
    
    path = r"C:\Work\export" # отслеживаемая директория с нужным файлом
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Проблема с путем файла.
Exception has occurred: FileNotFoundError
No such file or directory: ‘C:\\Work\\export\\121.txt’
Путь нового файла взял так
 nfile = event.src_path
Но как заменить \\ на \
#nfile = nfile.replace('\\\\','\\') не получается ((
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB