• Требуется захват вывода команды в subproccess python в реальном времени как реализовать?

    Vindicar
    @Vindicar
    RTFM!
    Используешь Popen(), перехватываешь ввод-вывод (stdin, stdout и stderr, передаёшь туда константу PIPE). Дальше используешь свойства stdin, stdout, stderr - это файлоподобные объекты (пайпы).
    Тут есть ряд подводных камней. Обычно чтение из файла - блокирующая операция, т.е. пока дочерний процесс не напишет что-то в пайп - твоя программа будет висеть и не реагировать на действия пользователя. В питоне неблокирующее чтение из пайпа доступно только под unix, а под виндой - только начиная с 3.12. Если нужна поддержка винды, будет практичнее запустить отдельный поток, который читает данные из процесса. Например, так:

    import collections
    import signal
    import subprocess
    import threading
    import time
    
    
    class ChildProcessReader(threading.Thread):
        def __init__(self, args: list[str], *, encoding: str | None = None, errors: str = 'ignore', exit_timeout: float = 1.0):
            super().__init__(name=f'Monitor {args!r}', daemon=True)
            self._encoding = encoding
            self._errors = errors
            self._exit_timeout = exit_timeout
            self._queue = collections.deque()
            self._child = subprocess.Popen(args,
                stdin=subprocess.DEVNULL,  # стандартный вход отключен
                stdout=subprocess.PIPE,  # перехватываем стандартный вывод
                stderr=subprocess.STDOUT,  # стандартный вывод ошибок направляем на стандартый вывод
            )
            self.start()
        
        @property
        def running(self) -> bool:
            '''Возвращает True, если процесс ещё жив.'''
            return self._child is not None
        
        @property
        def output(self) -> collections.deque:
            '''Очередь, в которую будут складываться получаемые от процесса строки.'''
            return self._queue 
        
        def stop(self) -> None:
            '''Останавливает процесс - сначала "по хорошему", потом принудительно.'''
            if self._child is None:
                return
            try:
                self._child.send_signal(signal.CTRL_C_EVENT)
                self._child.wait(self._exit_timeout)
            except subprocess.TimeoutExpired:
                self._child.terminate()
            except KeyboardInterrupt:
                pass
            finally:
                self._child = None
        
        def run(self) -> None:
            '''Тело потока.'''
            try:
                while self._child.poll() is None:  # рабочий цикл крутится, пока дочерний процесс жив.
                    stdout_data = self._child.stdout.read1()
                    if self._encoding is not None:
                        stdout_data = stdout_data.decode(self._encoding, errors=self._errors)
                    self._queue.append(stdout_data)
            except KeyboardInterrupt:
                pass
            finally:  # по выходу из цикла завершаем процесс
                self.stop()
    
    
    if __name__ == '__main__':
        child = ChildProcessReader(
            # выполняемая команда
            ['ping', '-t', '127.0.0.1'],
            # кодировка, в которой отдаёт данные твой процесс. None - отдавать байты как есть.
            encoding='cp866', errors='ignore',
            # сколько ждать завершения процесса
            exit_timeout=1.0
        )
        # процесс (и поток) стартуют немедленно по созданию экземпляра класса
        try:
            while child.running:
                # вместо просто цикла тебе лучше периодически выполнять код ниже иным способом
                # например, если у тебя GUI на tkinter, используй метод .after()
                try:  # пытаемся получить очередную строку от процесса
                    data = child.output.popleft()
                except IndexError:  # ничего нет, буфер пуст
                    # это просто реакция на отсутствие текста. Можно вообще ничего не делать.
                    print('.', end='', flush=True)
                    time.sleep(0.1)  # 
                else:  # получили строку, обрабатываем
                    print(f'\n> {data!r}')
        except KeyboardInterrupt:
            print('\nStopping')
        finally:  # в итоге надо будет прибить дочерний процесс
            child.stop()
    Ответ написан
    Комментировать
  • Почему global не действует на переменную, инициализированную во внешней функции?

    @Vitsliputsli

    Почему следующий код на PHP печатает 7, а не 12?

    Потому что это не js. А global работает ровно так как описано в доке, по-другому никак, т.к. область видимости работает иначе в языке.
    А делать надо так, чтобы функция внутри себя не обращалась с произвольными данными извне, только с теми, которые вы заранее объявили. Только так можно контролировать код. А значит global не нужен.
    Ответ написан
    Комментировать
  • Почему не подключается css?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Все подключено вроде верно

    Нет, не верно. Как минимум в документации описывается иной способ подключения статических файлов.
    Кроме того - там описаны дополнительные шаги, которые нужно сделать, если вы только разрабатываете проект и сайт запускается через manage.py
    Ответ написан
    Комментировать
  • Не подгружаются javascript при DEBUG = False, что делать?

    @Everything_is_bad
    Потому что статику принято раздавать не через django, почитай уже документацию про деплой
    Ответ написан
    2 комментария
  • Что делать, Django не видит тег endblock, если перед ним стоит другой тег с такой-же конструкцией?

    @Everything_is_bad
    Тебе совсем про другое пишет, открывай доки и читай как правильно писать тег csrf_token
    Ответ написан
    Комментировать
  • Ошибка в коде, в входе в авторизацию, в чем дело?

    Daemon23RUS
    @Daemon23RUS
    if () { while (..) {..} } else {..}
    Ваш блок if еще не закрыт, а вы ставите else
    P.S. Я иногда использую вот такой пароль 123';DROP TABLE IF EXISTS `registration`; -- Как ваша система авторизации относится к таким паролям ?
    P.S.S. Еще у меня есть пароль, я его называю покажи всех. 123' OR 'A'='A
    Ответ написан
    5 комментариев
  • Какая самая быстрая и эффективная библиотека в JS для работы с деньгами?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Как продублировать сайт?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Как это реализовать?

    1. Арендовать хостинг
    2. Залить туда сайт
    3. Внести изменения, убрав марку


    Вы какой ответ ждёте? Ссылку даже не дали на сайт. Почти уверен что можно стилями или js убрать не перенося сайт.
    Ответ написан
    Комментировать
  • Возможно ли восстановить сайт?

    Sanes
    @Sanes
    Делайте новый проект. Как раз с учетом ошибок предыдущего.
    Ответ написан
    Комментировать
  • В каком приложении программировать на Python?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Я только начал учиться программированию

    Я бы остановился на одном из этих:
    • Sublime text
    • Notepad++

    Плюсы:
    • Есть подсветка кода;
    • Крайне "легкие" в плане ресурсов;
    • Минимум лишних функций;

    Есть и другие, по типу:
    Pycharm, VS Code

    Но пока вы не потратите хотя-бы пару месяцев на изучение - они будут вам только мешать.
    В частности, в них слишком много инструментов для автоматизации, которые будут создавать ложную иллюзию простоты.
    Из очевидных - автодополнение имен функций/классов, работа с окружением
    Ответ написан
    3 комментария
  • Как проверить документ на оригинальность?

    Fragster
    @Fragster
    помогло? отметь решением!
    контрольная сумма, электронная подпись
    Ответ написан
    4 комментария
  • Fatal error: Uncaught ArgumentCountError: mysqli_select_db()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Дык вам же английским по белому пишет,
    mysqli_select_db() ожидает ровно 2 аргумента, дан 1
    Добавьте нужный аргумент в вызов функции.
    Ответ написан
    Комментировать
  • Как защитить программу от копирования без интернета?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Никак. Единствнный способ гарантированно защититься от нелицензионного копирования - это вынести ключевую часть функционала на сервер. Любая остальная защита - лишь усложнение реверс инжениринга и взлома. Всегда можно каленым железом вырезать любую проверку ключа из исполняемого кода.

    Активация ключа по телефону/интернету исключает лишь самый тривиальный способ "взлома" - просто копирование одной и той же лицензии по куче компьютеров без модификации исполняемых файлов.

    А так, берете какую-нибудь крипто библиотеку, выдаете сертификат, в котором подписываете своим приватным ключем "Лицензия выдана ООО рога и копыта". В программе зашит ваш публичный ключ. Программа проверяет файл лицензии, что он подписан вашим ключем. Но любой "хакер" умнее вас просто вырежет эту проверку из программы.
    Ответ написан
    4 комментария
  • Как сделать анимацию/движение элемента за курсором?

    sergey155
    @sergey155
    Codepen

    let block = document.querySelector('.block');
    let conteiner = document.querySelector('.conteiner');
    
    let movecircle = function (e) {
      let { clientX } = e;
      let x = Math.round((clientX / window.innerWidth) * 100);
      let smechenie = block.scrollWidth * (x / 100);
      block.style.setProperty('--x', `${x}%`);
    };
    
    ['mousemove','pointermove'].forEach( e => 
        window.addEventListener(e, movecircle, false)
    );
    Ответ написан
    1 комментарий
  • Как вставить скрипт, чтоб он не открывался на всю страницу?

    @alexalexes
    Либо обращайтесь к разработчикам виджета - help@unitiki.com
    Либо смотрите, какие ccs-селекторы воздействуют на модальное окно виджета и пытайтесь перебить их свойства своими css-стилями.
    Ответ написан
    Комментировать
  • Переменные var и let. В чем разница? Почему WebStorm жалуется на var?

    Любой ответ будет копипастой из MDN.
    Если просто:
    Если переменная должна быть изменяемой, то пиши let. Иначе - const.
    var не используй.

    Если сложно:
    https://habr.com/ru/companies/ruvds/articles/420359/
    Ответ написан
  • Как из формы получить описание выбранного select option с помощью php POST?

    Вы же где-то берёте, что curs1 = Курс 1, curs2 = Курс 2, curs3 = Курс 3?

    Вы либо сопоставляете значение по curs1, curs2, curs3 в php, если оно у вас где-то хранится, например:
    $courses = [
        'curs1' => 'Курс 1',
        'curs2' => 'Курс 2',
        'curs3' => 'Курс 3'
    ];
    
    $courses[$_POST['scourse']];

    Либо пишите Курс 1, Курс 2, Курс 3 в value.
    <select name="scourse" id="selectcourse"  >
              <option value="">Выберите курс для обучения</option>
              <option value="Курс 1">Курс 1</option>
              <option value="Курс 2">Курс 2</option>
              <option value="Курс 3">Курс 3</option>
    </select>

    UPD: Или как в комментариях написали, value в этих оption можно вообще не писать.
    <select name="scourse" id="selectcourse"  >
        <option value="">Выберите курс для обучения</option>
        <option>Курс 1</option>
        <option>Курс 2</option>
        <option>Курс 3</option>
    </select>


    P.S. И не забывайте валидировать то, что приходит в $_POST и $_GET.
    Ответ написан
    6 комментариев
  • Как копировать содержимое папки на корневое каталог?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    cp -r Test1/* /
    Ответ написан
    Комментировать
  • Не работает миграция Django, что делать?

    @invilso
    content = models.TextField(blanks=True)
    замените на
    content = models.TextField(blank=True)
    Об этом написано тут: TypeError: __init__() got an unexpected keyword argument 'blanks'
    Это значит что у метода __init__ нет аргумента blanks, зато есть blank.
    Вместо того чтобы сначала тут спрашивать, вам стоило бы погуглить описание этой ошибки, надеюсь так и сделаете в следующий раз.
    Ответ написан
    1 комментарий
  • Как на js сделать мобильное приложение?

    Fragster
    @Fragster
    помогло? отметь решением!
    Capacitor
    Ответ написан
    Комментировать