У меня есть папка с большим количеством файлов, например file_1.gz
, до file_250.gz
и увеличения.Выполнение команды zgrep и запись результатов в файл
zgrep
команда, которая ищет через них, как:
zgrep -Pi "\"name\": \"bob\"" ../../LM/DATA/file_*.gz
Я хочу, чтобы выполнить эту команду в питона подпроцесса, как:
out_file = os.path.join(out_file_path, file_name)
search_command = ['zgrep', '-Pi', '"name": "bob"', '../../LM/DATA/file_*.gz']
process = subprocess.Popen(search_command, stdout=out_file)
Проблема является out_file
создается, но это пустые и эти погрешности подняты:
<type 'exceptions.AttributeError'>
'str' object has no attribute 'fileno'
Какое решение?
И действительно ли вы должны использовать 'subprocess' здесь? Почему бы просто не использовать 'os.walk()' для получения всех файлов в этой папке и использовать regex для поиска файлов, которые вы хотите? –
На самом деле, если точка должна запускать одну и ту же команду для всех файлов, нет необходимости в python. 'find ../../LM/DATA -name 'файл * .gz' | xargs zgrep -Pi '"name": "bob"' '. И если точка должна запускать ее параллельно, просто используйте 'GNU parallel' вместо' xargs'. – liborm
Причина в том, что этот мир кода является частью большого проекта, который ищет файлы журнала, а затем возвращает результаты клиенту. –