Wget или завиток от стандартного ввода - PullRequest
15 голосов
/ 22 января 2012

Я хотел бы загрузить веб-страницы, предоставляя URL-адреса со стандартного ввода.По сути, один процесс непрерывно создает URL-адреса для stdout / file, и я хочу направить их в wget или curl.(Подумайте об этом, как о простом веб-сканере, если хотите).

Кажется, это работает нормально:

tail 1.log | wget -i - -O - -q 

Но когда я использую tail -f, он больше не работает(буферизация или wget ожидает EOF?):

tail -f 1.log | wget -i - -O - -q

Кто-нибудь может предложить решение с использованием wget, curl или любого другого стандартного инструмента Unix?В идеале я не хочу перезапускать wget в цикле, просто продолжайте загружать URL-адреса по мере их поступления.

Ответы [ 4 ]

7 голосов
/ 22 января 2012

Вам нужно использовать xargs.Например,

tail -f 1.log | xargs -n1 wget -O - -q
5 голосов
/ 07 сентября 2015

Вы можете сделать это с помощью cURL, но ваш ввод должен быть правильно отформатирован.Пример alfa.txt:

url example.com
output example.htm
url stackoverflow.com
output stackoverflow.htm

Альтернативный пример:

url stackoverflow.com/questions
remote-name
url stackoverflow.com/documentation
remote-name

Пример команды:

cat alfa.txt | curl -K-
0 голосов
/ 29 ноября 2017

Попробуйте передать от tail -f до python -c $'import pycurl;c=pycurl.Curl()\nwhile True: c.setopt(pycurl.URL,raw_input().strip()),c.perform()'

Получается curl (ну, вы, вероятно, имели в виду curl для командной строки, и я называю его библиотекой из однострочного Python, но он по-прежнему curl) для немедленного извлечения каждого URL, сохраняя при этом преимущество сохранения сокет сервера откроется, если вы запрашиваете несколько URL-адресов с одного и того же сервера по очереди. Хотя это не совсем надежно: если один из ваших URL-адресов является duff, вся команда потерпит неудачу (возможно, вы захотите сделать это правильным скриптом Python и добавьте try / except для обработки этого), а также есть небольшая деталь что он выдаст EOFError на EOF (но я предполагаю, что это не важно, если вы используете tail -f).

0 голосов
/ 22 января 2012

Используйте xargs, который преобразует стандартный аргумент в аргумент.

tail 1.log | xargs -L 1 wget
...