Ответы пользователя по тегу Python
  • Как реализовать выход из программы или закрытие cmd консоли при вводе 'stop'?

    Vindicar
    @Vindicar
    RTFM!
    Грубое решение: настрой таймаут чтения, и при таймауте проверяй логическую переменную, которая хранит признак "пора остановиться". Тогда если ты эту переменную взведёшь, твои потоки-клиенты отвалятся, пусть и не сразу.
    Ответ написан
    Комментировать
  • Можно ли в python задать размеры окна другому приложению?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужна функция WinAPI SetWindowPos().
    Чтобы достучаться до винапи, используй стандартный модуль ctypes.
    Ответ написан
    Комментировать
  • Как можно распарсить текст на python?

    Vindicar
    @Vindicar
    RTFM!
    Модуль re в помощь. Если grep умеешь пользоваться, то и тут справишься.
    Ответ написан
  • Как сделать так чтобы бот понимал какой сегодня день недели?

    Vindicar
    @Vindicar
    RTFM!
    Учим стандартную библиотекц питона.
    Там это есть.
    import datetime
    day_of_week = datetime.datetime.now.weekday()
    Ответ написан
    3 комментария
  • При каких обстоятельствах запущен данный процесс python-программы?

    Vindicar
    @Vindicar
    RTFM!
    Я бы попробовал использовать аудит-хук.
    Многие функции питона генерят события аудита, на которые можно подписаться.
    Есть полная таблица событий для CPython, но тебя будут интересовать события типа subprocess.Popen, os.system, os.spawn, os.startfile, os.exec, os.fork и так далее.
    Внутри хука можешь попробовать вызвать traceback.format_stack() чтобы узнать текущий стек вызовов, и записать его в какой-нибудь журнал работы.
    import sys
    import traceback
    # хук который ловит событие импорта модуля
    def hook(event, args):
        if event != 'import':
            return
        name, filename = args[0], args[1]
        callstack = traceback.extract_stack(limit=None)
        print(event, name, filename)
        for item in traceback.format_list(callstack):
            print('    ', item.strip())
    
    sys.addaudithook(hook)
    
    import json
    
    print('Done')


    Это сработает только если процессы спавнятся средствами питона, а не каким-нибудь скомпилированным расширением.

    Также можешь поискать использование модуля multiprocessing, это тоже вероятный кандидат.
    Ответ написан
    1 комментарий
  • Почему в результате изменения второго списка меняется также и первый, если перед этим я приравнял второй список к первому?

    Vindicar
    @Vindicar
    RTFM!
    Читаем про изменяемые и неизменяемые объекты в питоне.
    Если коротко, когда ты делаешь a = b, ты не копируешь объект. Ты просто создаёшь новую ссылку на него.
    Достаточно проверить так:
    print(languages is new_list) # True
    Если объект изменяемый, то изменения будут видны по любой ссылке, что логично:
    a = [1, 2, 3]
    b = a  # b ссылается на тот же список
    b.append(4)  # список изменили

    Если объект неизменяемый, то это не так заметно, потому что ссылка заменяется на ссылку на новый объект:
    a = 5
    b = a  # b ссылается на 5
    a += 1  # a = a + 1 т.е. a = 6 - a теперь ссылается на новый объект 6, b - по прежнему на 5.


    Если нужна независимая копия списка, словаря или иного изменяемого объекта - делай её явно.
    Ответ написан
    1 комментарий
  • Как замокать путь для os.curdir в тесте?

    Vindicar
    @Vindicar
    RTFM!
    Просто сменить текущий рабочий каталог самому?
    Ответ написан
    Комментировать
  • Как использовать функцию написанную на Python в C#?

    Vindicar
    @Vindicar
    RTFM!
    1. Если нужно именно вызывать функции, то что-то типа Python.NET. А вообще на кой тебе, код же суперпримитивный, его в разы проще переписать на C# чем разбираться с внедрением питона в .NET среду.
    2. FileSystemWatcher
    Ответ написан
    6 комментариев
  • Как правильно вывести структуру из dll на c++ в Python?

    Vindicar
    @Vindicar
    RTFM!
    Разумеется, тебе и реализацию функции надо будет поправить, её заголовок должен совпадать с тем, который ты описал в заголовочном файле. Это же азы!
    Более того, у тебя и тело функции изменится. Теперь вместо
    __declspec(dllexport) outdata SpiralsCoord(float x1, float x2, float x3, float x4, float x5, int x6) {
    outdata data;
    data.out_x1 = xy1;
    data.out_x2 = xy2;
    data.out_x3 = xy3;
    return data;
    }

    будет код вроде
    __declspec(dllexport) void SpiralsCoord(float x1, float x2, float x3, float x4, float x5, int x6, outdata* data) {
    //используем оператор ->, так как data теперь указатель на структуру, а не сама структура
    data->out_x1 = xy1; 
    data->out_x2 = xy2;
    data->out_x3 = xy3;
    }

    Ну а в Питоне тогда для передачи последнего параметера нужно будет сделать кое-что.
    1. Описать структуру outdata как класс-потомок ctypes.Structure.
    2. Создать экземпляр этой структуры.
    3. Описать прототип функции SpiralsCoord (или под каким именем она экспортируется?), указав типы параметров и возвращаемого значения.
    4. Использовать ctypes.byref() при передаче экземпляра структуры последним параметром.
    Ответ написан
    Комментировать
  • В чем ошибка кода?

    Vindicar
    @Vindicar
    RTFM!
    Ошибка в том, что ты пытаешься делать две вещи сразу.
    У тебя описан словарь фильтров:
    self.filters = {  # тут у тебя человекочитаемые заголовки
                "ID": tk.StringVar(),
                "Город": tk.StringVar(),
                "Температура": tk.StringVar(),
                "Погода": tk.StringVar(),
                "Скорость ветра": tk.StringVar(),
    }

    Но дальше ты делаешь
    # тут ты переносишь пару заголовок-значение в словарь строка:строка
    filter_values = {criteria: var.get() for criteria, var in self.filters.items()}
    ...
    for criteria, value in filter_values.items():
        if value:  # а тут ты внезапно решаешь что у тебя ключ - имя поля, а не заголовок
            conditions.append(f"{criteria} LIKE ?")


    Собственно, почему только с ID и работает поиск. Потому что это единственное поле, где заголовок совпадает с именем поля в таблице БД.
    Ответ написан
    Комментировать
  • При добавлении пользователя в таблицу в поле ID ставиться none, хотя я сделал проверку, пользователю присваивается ID. Что не так?

    Vindicar
    @Vindicar
    RTFM!
    Ты эту БД давно используешь? Просто новички часто споыткаются о простой факт. Запросы вида CREATE TABLE IF NOT EXISTS создадут отсутствующую таблицу, но не изменят таблицу, если она уже существует. Даже если структура таблицы отличается от заданной. Скажем, если ты добавил автоинкремент в запрос CREATE позднее, то в реальной таблице его не будет.
    В таком случае проще всего снести файл базы, чтобы она пересоздалась, и снова наполнить его данными.

    Также можешь попробовать узнать реальную структуру твоей таблицы так:
    SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'customers'
    Ответ написан
    Комментировать
  • Как можно сделать метод класса сразу статическим и динамическим?

    Vindicar
    @Vindicar
    RTFM!
    По-хорошему должен быть только один способ работать с твоим классом. Выбери что-то одно и придерживайся этого подхода.

    Если очень хочется выстрелить себе в ногу, сделай метод статическим - это обеспечит его вызов и на классе, и на экземпляре - а внутри методла получай доступ к синглтон-экземпляру и работай с ним.

    Ну и да, я надеюсь что логгер ты пишешь только как упражнение, а не потому что не знаешь о модуле logging. =)
    Ответ написан
    Комментировать
  • Что за странная ошибка python? почему?

    Vindicar
    @Vindicar
    RTFM!
    Слишком много метаклассов используешь. Лучше максимум один во всей иерархии наследования твоего класса.
    Подозреваю, что у QMainWindow свой метакласс, у View свой, а потому не стоит наследоваться от них обоих.
    Да собственно, и вопрос - на кой тебе наследоваться от них обоих?
    Ответ написан
    Комментировать
  • Как выполнить функцию в другом файле и получить return без импорта?

    Vindicar
    @Vindicar
    RTFM!
    fastapi или flask хороший вариант если хочешь API на базе HTTP.
    Ответ написан
    Комментировать
  • Проблема с кириллицей, как ее решить?

    Vindicar
    @Vindicar
    RTFM!
    Разберись, в какой кодировке приходят символы от клавиатуры (под виндой вариантов немного: для кириллицы windows-1251 или ucs-2), и в какой кодировке ты их пишешь в файл.
    Ответ написан
    3 комментария
  • Как реализовать поиск координат пересечения трех окружностей, если даны координаты радиусов этих окружностей и их радиус?

    Vindicar
    @Vindicar
    RTFM!
    Сначала решить систему уравнений чтобы найти точки пересечения двух окружностей. Примем xi, yi за центр, а Ri за радиус. Тогда получим:
    (x - xA)^2 + (y - yA)^2 = RA^2
    (x - xB)^2 + (y - yB)^2 = RB^2
    Раскрываем скобки, вычитаем первое уравнение из второго, получаем квадратное уравнение. 2 корня - 2 точки пересечения, 1 корень - одна точка касания, нет корней - окружности не пересекаются.
    Потом эти точки (1 или 2) проверить на принадлежность третьей окружности, т.е. убедиться что выполняется условие (x - xС)^2 + (y - yС)^2 = RС^2. Проверку выполнения нужно проводить с некоторой точностью, т.е. сравнение делать не a == b, а скорее в духе abs(a - b) < 0.000001.
    Вот и всё.

    Если можно использовать sympy, то можешь попробовать сразу задать систему из трёх уравнений в нём.
    Ответ написан
    8 комментариев
  • Как запустить пользовательского бота Pyrogram в Docker?

    Vindicar
    @Vindicar
    RTFM!
    Как уже написали в комментариях, файловая система контейнера неизменяема. Всё, что нужно изменять (типа БД, логов и т.п.) нужно выносить в отдельный(-ые) каталог(-и) и монтировать их как volume..
    Ответ написан
    1 комментарий
  • Почему тг бот неправильно принимает сообщение?

    Vindicar
    @Vindicar
    RTFM!
    @bot.message_handler(content_types='text')
                def us(message):
                    bot.send_message(message.chat.id, 'проверка')

    Не надо объявдять обработчики событий по ходу дела, это не будет работать так, как ты ожидаешь.
    Ищи другие средства, какие - зависит от библиотеки. В случае telebot это register_next_step_handler(), в репозитории либы есть пример.
    Ответ написан
    Комментировать
  • Как импортировать переменную в python IDLE из другого модуля?

    Vindicar
    @Vindicar
    RTFM!
    Модуль при импорте всегда выполняется целиком, за исключением частей, накрытых if __name__ == '__main__':. Если ты уверен, что это не так - пример кода в студию.
    Ответ написан
  • Как пофиксить ошибку с missing 1 required positional argument: 'event'?

    Vindicar
    @Vindicar
    RTFM!
    Ну так а ты что хотел?
    @client.on(events.NewMessage(chats=url))
    async def main(event):

    Ты объявил, что у тебя main() требует один аргумент, а потом вызываешь без аргументов.
    Собственно, возникает вопрос: ты вообще понимаешь, что делаешь, или пытаешься слепить код наугад, авось заработает?
    Ответ написан
    Комментировать