$ script.py *.txt
Я хочу запустить script.py для всех файлов .txt в этом каталоге, включая 1.txt, 2.txt и 3.txt. Я могу придумать два подхода к этому: использование скрипта python для обработки подстановки или создание нескольких процессов в оболочке.
Я предпочитаю, чтобы сценарий обрабатывал подстановку.
В соответствии с Предотвратить подстановку после подстановки переменных я могу использовать set -f
, чтобы отключить ее. Как я могу указать эту опцию исключительно для сценариев Python?
sys.argv[1:]
, либо используяfileinput
). - person abarnert   schedule 22.08.2013optparse
илиargparse
. - person Brian   schedule 22.08.2013optparse
илиargparse
или другие библиотеки, принимают переменное количество параметров и отлично работают с шаровидная оболочка. Если у вас этого не происходит, вы, вероятно, неправильно спроектировали интерфейс, и это то, что вам нужно исправить. - person abarnert   schedule 22.08.2013$@
? Если вы напишите это в ответе, я приму это - person Brian   schedule 22.08.2013script.py
может работать с несколькими входными файлами (т. е. с несколькими аргументами, оставшимися после синтаксического анализа параметров), так же, как, например,ls
, то подстановка оболочки не вызовет никаких проблем. Есть некоторые инструменты, для которых такой интерфейс был бы нецелесообразным (например,convert
в ImageMagick имеет опции, вставленные между аргументами;find
, очевидно, должен делать свои собственные блоббинги…), но они являются редким исключением, а не правилом. Как вы думаете, почему ваш сценарий является исключением? - person abarnert   schedule 22.08.2013*.txt
. Я не знал об этом, так как дополнительные аргументы пропали после входа в сценарий, который явно не обрабатывал их. Учитывая этот факт, ваш первоначальный комментарий имеет смысл. Спасибо, что помогли мне определить проблему. Мой первоначальный вопрос, хотя и несуществующий, по-прежнему остается интересным вопросом, и мне любопытно посмотреть, как кто-то решит эту проблему, как предполагалось изначально. - person Brian   schedule 22.08.2013*.txt
несколькими аргументами (аналогично тому, что сделал бы Pythona[5:6] = glob(a[5])
), а затем передает полученный аргумент список для вашей программы. - person abarnert   schedule 22.08.2013