• Как объединить 2 потока в Asyncio?

    i229194964
    @i229194964
    Веб разработчик
    import asyncio
    import logging
    import time
    
    from watchdog.observers import Observer
    from watchdog.events import PatternMatchingEventHandler
    
    from aiogram import Bot, Dispatcher, MemoryStorage
    
    from config import config
    import Handlers
    from sqlFile import db, sql, create_sql
    
    class MyHandler(PatternMatchingEventHandler):
        patterns = ["*.txt", "*.jpg"]
    
        def process(self, event):
            out = str(event.src_path)
            with open(out, "r") as t1:
                text = t1.read()
            print(out)
            print(text)
    
        def on_modified(self, event):
            self.process(event)
    
        def on_created(self, event):
            self.process(event)
    
    async def observer_run():
        args = 'C:\\ForTest'
        observer = Observer()
        observer.schedule(MyHandler(), path=args if args else '.')
        observer.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            observer.stop()
        observer.join()
    
    async def main():
        bot = Bot(token=config['token'], parse_mode="HTML")
        storage = MemoryStorage()
        dp = Dispatcher(storage=storage)
        logging.basicConfig(level=logging.INFO)
        create_sql()
    
        dp.include_router(Handlers.user_router)
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot)
    
    if __name__ == "__main__":
        asyncio.run(asyncio.gather(main(), observer_run()))
    Ответ написан
    1 комментарий
  • Как получить и обработать событие с помощью Observer и встроить эту функцию в поток?

    Vindicar
    @Vindicar
    RTFM!
    Документация советует run_coroutine_threadsafe(). Эта функция позволяет запланировать вызов корутины с параметрами (читай, эквивалент await вызова) в рамках рабочего цикла (loop) asyncio, который крутится в другом потоке. С полученным future можно что-то сделать, например, подождать, пока оно реализуется. Пример по ссылке.
    Ответ написан
    Комментировать
  • Как я могу запустить скрипт в Pycharm, используя CMD?

    shabelski89
    @shabelski89
    engineer
    Вы уверены что правильно определили куда PyCharm ставит интерпретатор ?
    У меня в проектах это \project\venv\Scripts\python.exe
    C:\Users\ashab\PycharmProjects\pdfhelper\venv\Scripts\python.exe

    там же лежит скрипт активации virtalvenv
    # до активации venv
    C:\Users\ashab>python -V
    Python 3.7.9
    
    C:\Users\ashab>C:\Users\ashab\PycharmProjects\pdfhelper\venv\Scripts\activate
    # после активации venv
    (venv) C:\Users\ashab>python -V
    Python 3.9.6


    при активированном venv
    python "D:\PyProjects\Test\Literal2.py"

    по завершению deactivate
    Ответ написан
    2 комментария
  • Как я могу запустить скрипт в Pycharm, используя CMD?

    Vindicar
    @Vindicar
    RTFM!
    В общем, по итогам обсуждения:
    Я бы разобрался, как работает venv. Pycharm всё-таки очень жоркая штука, не надо его использовать просто как среду выполнения. Вообще, ЕМНИП, достаточно вызвать python.exe, который лежит внутри окружения проекта. Что-то типа
    cd C:\my_project\
    .venv\bin\python3.exe main.py

    Если этого мало - разбирайся со скриптом activate.
    Шрифт и цвет терминала тоже поддаётся настройке, если что.

    Но если прям невтерпёж удалить гланды через задницу
    Найди способ послать в PyCharm сочетание Ctrl-Shift-F10, оно запускает текущий файл. Это можно сделать через тот же питон (модули типа pywinauto или pyautogui), или используя стороннее ПО типа AutoHotkey.
    Ответ написан
    1 комментарий
  • Как я могу запустить скрипт в Pycharm, используя CMD?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как поставить venv (изолированную среду) и выполнять код из терминала PyCharm, по порядку:
    1. Запускаем PyCharm и переходим в проект.
    2. Открываем терминал PyCharm.
    3. Ставим venv (изолированную среду):
    $ python -m venv venv (win).
    4. Переходим в настройки PyCharm: Setting > Project (имя?) > Python Interpreter > Add Interpreter > Add local Interpreter > Virtualenv Enviroment > Enviroment выбрать "Existing" (будет доступен лишь текущий проект) > Ок > Ок.
    5. Переход в виртуальную среду из PyCharm терминала:
    $ .\venv\scripts\activate.
    Теперь можно выполнить код с учетом виртуальной среды:
    $ main.py
    Вход в venv, находясь в директории проекта: $ .\venv\scripts\activate
    Выход из venv, находясь в директории проекта: $ deactivate.

    Если же Вам не нужна виртуальная среда в проекте, то можно выполнить код из PyCharm терминала так:
    $ python main.py
    В таком случае, код будет выполняться с учетом глобального окружения.
    Ответ написан
    Комментировать