Вывод в реальном времени с использованием подпроцесса скрипта Python с подсказками на чтениеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вывод в реальном времени с использованием подпроцесса скрипта Python с подсказками на чтение

Сообщение Anonymous »


У меня есть сценарий bash, который взаимодействует с пользователем с помощью приглашений на чтение, например:

#!/bin/bash начало эха read -p "Нажмите что-нибудь, чтобы продолжить" -n 1 -r эхо получило $REPLY. прочитать -p "Нажать еще раз" -n 1 -r эхо "готово" Я хочу запустить сценарий как подпроцесс с использованием Python, одновременно захватывая выходные данные и отображая их пользователю в режиме реального времени. Просматривая различные темы здесь, я нашел это решение, которое действительно работает для меня, однако очень медленно, если сценарий выдает большие выходные данные (значительно дольше, чем запуск сценария вручную). , вероятно, из-за постоянного использования флеша для каждого символа:

подпроцесс импорта с subprocess.Popen(['./a.sh'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) в качестве процедуры: выходной_текст = '' в то время как c := proc.stdout.read(1): print(c, end='', флеш=True) вывод_текст += с Опция «read(1)» необходима, поскольку чтение блокируется, а попытка прочитать более крупные фрагменты означает, что сообщение с подсказкой не будет полностью отображено до того, как пользователь должен будет ввести данные. Сброс также необходим, поскольку без него сообщение с приглашением ввода печатается только после того, как пользователю необходимо ввести данные.

Я ищу решение, которое позволит считывать большие объемы данных (следовательно, уменьшая количество вызовов печати), сохраняя при этом уверенность в том, что полное приглашение отображается пользователю перед ожиданием его ввода.
>
Кроме того, для целей этого вопроса сценарий bash предоставляется в качестве входных данных и не может быть изменен, и у нас нет никакой информации о его структуре. Я пытаюсь написать код, который будет выполнять такие сценарии, одновременно представляя и записывая их выходные данные.

Как и при использовании более крупных фрагментов, readline здесь не будет работать, поскольку ожидает EOL, но EOL получается только после того, как пользователь вводит данные для приглашения.

Я пробовал просмотреть pexpect, но все примеры, которые я видел, предполагают, что они знают, какое приглашение искать, в то время как в этом случае я предполагаю, что не знаю сценария, который запускаю.

В различных подобных вопросах, которые я видел, решение либо использует чтение одного символа (например, путем вызова read(1) или установки размера буфера равным 1), либо использует строку чтения - ни один из которых не кажется подходящим для моего текущего использования случай. Примеры: Как получить выходные данные подпроцесса Python в реальном времени? Получение вывода в реальном времени с использованием подпроцесса Получение полного вывода в реальном времени с использованием подпроцесса
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вывод в реальном времени из подпроцесса Python в блокноте Jupyter
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить вывод подпроцесса на стандартный вывод в Python?
    Anonymous » » в форуме Python
    0 Ответы
    79 Просмотры
    Последнее сообщение Anonymous
  • Получение вывода в реальном времени из iperf3 с использованием подпроцесса Python
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Поиск pid для выполнения скрипта Python B на терминале с использованием popen из скрипта Python A
    Anonymous » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Поиск pid для выполнения скрипта Python B на терминале с использованием popen из скрипта Python A
    Anonymous » » в форуме Linux
    0 Ответы
    86 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»