Я работаю над некоторым кодом Python, который использует optparse
, чтобы получить имя некоторых входных файлов, затем (на бумаге) расширяет этот ввод, используя, по возможности, glob.glob()
.Захват файловой системы globs с использованием optparse
Кажется, что моя оболочка (zsh
) расширяет glob перед тем, как передать ее на Python. Например, если я запустил python myscript.py *.txt
, я получу первый соответствующий файл .txt
вместо буквенного глоба, *.txt
. Для меня это бесполезно.
Я полагаю, что это больше проблема на стороне корпуса; но с учетом переносимости, я хотел бы знать, есть ли на стороне Python решение.
optparse
код, используемый для этого:
p = OptionParser()
p.add_option('-f', '--infile', dest='input', action='store', type='string')
(options, args) = p.parse_args()
Вопрос воспроизводит со следующим минимальным примером (который также показывает, что она распространяется на извлечение ручного аргумента с использованием sys.argv
):
$ ls *.txt
file1.txt file2.txt file3.txt
$ python -c 'import sys; print sys.argv' *.txt
['-c', 'file1.txt', 'file2.txt', 'file3.txt']
Итак, еще раз , для ясности, я ищу способ передать glob literal моему коду python, чтобы он расширился там, используя Python, потому что обходной путь оболочки повреждает переносимость.
Я знал об этом; но есть ли решение, которое не требует, чтобы конечный пользователь избежал специальных символов? – Jules
Или вы можете 'set -f', но непонятно, почему это было бы лучше, чем поведение по умолчанию оболочки. Может быть, ОП должен объяснить, почему проблема по умолчанию кажется проблематичной? – tripleee
@ tripleee проблема по умолчанию, потому что, если я буду строить вокруг * shell * расширяющихся глобусов, прежде чем я их получу, мне придется переписать большой кусок моего парсера вручную. На данный момент это просто пустая трата времени, и это может оказаться полезным и в будущем. – Jules