Определите, когда сценарий Python будет ожидать ручного ввода

Вам действительно следует использовать file для более глубокого опроса содержимого каталога, чем то, что предоставляет вам 'ls -l'.

find . -type f

Команда find является древней магией юникса. Она избавит вас от бесконечных регексуальных споров.

1
27.10.2015, 03:25
1 ответ

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

echo | python script.py

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

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

yes "" | python script.py

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


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

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

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

.
2
27.01.2020, 23:38

Теги

Похожие вопросы