2014-12-04 3 views
0

У меня есть сценарий, который использует python и wget для загрузки веб-сайта, а затем выполняет некоторые задачи с файлами. Я использую строку os.system("wget -m -w 2 -P " directory) для вызова wget, рекурсивную загрузку каждой страницы в домене. Это прекрасно работает, но теперь стало необходимо контролировать wget для ошибок при загрузке файла, когда он следует за ссылкой (ошибка Think 404, пытающаяся получить доступ к странице).Захват ошибок wget с python

Это не вопрос получения кода выхода, а просмотр каждого «блока» вывода, который снабжает wget.

Есть ли простой способ просмотреть вывод wget с помощью Python без необходимости перенаправлять его в файл, а затем искать файл для идентифицирующей строки текста?

+2

Просто скачайте файлы непосредственно на Python, например, с помощью [запросов] (http://docs.python-requests.org/en/latest/) модуля. Тогда вы можете легко обрабатывать ошибки. – wenzul

+1

Используйте модуль '' request' '(http://docs.python-requests.org/en/latest/) вместо 'wget'. Вы сбережете себе * тонну головных болей. –

+1

@wenzul & Lukas Graf: внимательно прочитайте вопрос и в конце концов прочитайте страницу man для wget (в частности, что означает опция -m). –

ответ

0

Из того, что я могу сказать, os.system возвращает код выхода команды.

Таким образом, следующее должно работать:

code = os.system("wget -m -w 2 -P {}".format(directory)} 
1

Если вы хотите код выхода, то это то, что os.system() возвращает (предупреждение: это стандартный процесс линукс код выхода, так 0 означает «нет ошибок» и что угодно иначе ошибка).

Если вы хотите получить более подробную информацию, вам нужно будет использовать модуль подпроцесса (https://docs.python.org/2/library/subprocess.html#module-subprocess), чтобы передать stderr подпроцесса обратно в ваш код Python. Или вы можете использовать Python вместо wget - существует довольно много сканеров на основе Python.

+0

@Butters Этот ответ полностью удовлетворяет вопрос. Теперь вы внимательно изучите эту ссылку и приложите собственные усилия. – wenzul

+0

Как примечание стороны: я бы не полагался на сообщения об ошибках wget в любом случае для чего-либо серьезного - если только я не хочу, чтобы напечатать сообщение об ошибке дословно. –

+0

Хорошо, можете изучить [это] (https://stackoverflow.com/questions/13332268/python-subprocess-command-with-pipe) – wenzul

Смежные вопросы