Подтвердить что ты не робот

Wget или curl из stdin

Я хотел бы загрузить веб-страницы при отправке URL-адресов из stdin. По существу, один процесс непрерывно создает 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-адреса по мере их появления.

4b9b3361

Ответ 1

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

tail -f 1.log | xargs -n1 wget -O - -q

Ответ 2

Вы можете сделать это с помощью 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-

Ответ 3

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

tail 1.log | xargs -L 1 wget

Ответ 4

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

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