Ответ 1
Что вам нужно использовать, это xargs. Например.
tail -f 1.log | xargs -n1 wget -O - -q
Я хотел бы загрузить веб-страницы при отправке 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-адреса по мере их появления.
Что вам нужно использовать, это xargs. Например.
tail -f 1.log | xargs -n1 wget -O - -q
Вы можете сделать это с помощью 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-
Используйте xargs
, который преобразует stdin в аргумент.
tail 1.log | xargs -L 1 wget
Попробуйте подключить 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
).