Вам действительно следует использовать file
для более глубокого опроса содержимого каталога, чем то, что предоставляет вам 'ls -l'.
find . -type f
Команда find
является древней магией юникса. Она избавит вас от бесконечных регексуальных споров.
Если требуется только один ввод, просто используйте echo
и труба:
echo | python script.py
echo
печатает пустую строку (с новой строкой) на стандартный вывод, а затем мы перенаправляем ее на ввод скрипта Python , используя |
. Когда Python читает со стандартного входа, он получит пустую строку и продолжит.
Если сценарий хочет, чтобы более одного ввода нажмите, вы можете использовать да
команды и трубку:
yes "" | python script.py
команда да
печатает одну и ту же строку на стандартный выход снова и снова навсегда. По умолчанию строкой является y
, но здесь мы делаем ее пустой строкой, так что это просто новые строки навсегда.
Если ввод требуется в качестве ответа на определенную строку, а в другое время, когда вам нужен другой ввод, используйте expect
, что является "расширением Tcl, которое позволяет автоматизировать взаимодействие с интерактивными программами".
Можно написать свой скрипт оболочки так, чтобы он читал из вывода Python и создавал для него новый ввод, но я не особо рекомендую его. Если вы хотите это сделать, см. IO Redirection в Advanced Bash Scripting Guide: для этого вам нужно будет клонировать дескрипторы файлов. Вы также можете использовать mkfifo
и сделать именованные файлы, затем читать из них и записывать на них нормально.
Честно говоря, я бы начал думать об альтернативных подходах, если вы достигаете точки, когда делаете любой из этих подходов: скриптинг оболочки просто не построен для этого, и будет гораздо проще написать свой скрипт, скажем, на самом Python.
.