Intereting Posts
Приложение терминала удалено из Ubuntu 13 Внешние устройства ввода планшета для Linux (Inkscape / Gimp)? Заменить строку в первом столбце Как предотвратить закрытие терминала при запуске программы с завершением? Беспользованный SSH-доступ, не работающий с отклоненным сообщением Справочная символьная ссылка на inode, а не на путь (например, жесткие ссылки каталога) Как настроить подключение к Интернету в Linux Mint? Передача команды с аргументами скрипту Unix (ошибка NFS) – хранение 7320 туннель tcp внутри локальной сети с использованием iptables и моста Как пометить все, что хранится в файловой системе Linux? Я не могу клонировать git-репо, когда за прокси-сервером CSF блокирует трафик ethereum, несмотря на действительный конфиг Какое программное обеспечение позволяет изменять среду выполнения, сохраняя при этом одно и то же ядро? Linux Mint – черный экран при загрузке с живого USB

Определите, когда скрипт python ожидает ввода вручную

Я пишу скрипт оболочки, который выполняет скрипт Python. Сценарий Python останавливается, чтобы ввести ручной ввод. Тем не менее, я не хочу, чтобы каждый раз вводить текст в сценарий. Вместо этого я хочу передать ручной ввод из исполняемого сценария оболочки.

Просьба помочь, если есть способ сделать это?

Если требуется только один ввод, просто используйте echo и канал:

 echo | python script.py 

echo печатает пустую строку (с новой строкой) до стандартного вывода, а затем перенаправляет ее на вход скрипта Python, используя | , Когда Python читает со стандартного ввода, он получит пустую строку и продолжит.

Если скрипт хочет более одного нажатия, вы можете использовать команду yes и pipe:

 yes "" | python script.py 

Команда yes выводит одну и ту же строку на стандартный вывод снова и снова навсегда. По умолчанию строка равна y , но здесь мы делаем ее пустой строкой, так что это просто символы новой строки навсегда.


Если ввод требуется как ответ на конкретное приглашение, а в другое время вам нужен другой ввод, используйте expect , который является «расширением Tcl, которое позволяет автоматизировать взаимодействие с интерактивными программами».

Можно написать сценарий оболочки, чтобы он читал с вывода Python и создавал для него новый вход, но я не рекомендую его особо. Если вы хотите это сделать, см. Перенаправление ввода-вывода в Руководстве по разработке сценариев Advanced Bash : вам нужно будет клонировать файловые дескрипторы для этого. Вы также можете использовать mkfifo и создавать именованные файлы pipe, затем читать и записывать их нормально.

Честно говоря, я бы начал думать об альтернативных подходах, если вы достигли цели сделать любой из этих подходов: сценарии для оболочки просто не созданы для этого, и будет гораздо проще написать ваш скрипт, скажем, Сам Python.