2012-01-21 1 views
13

stdin에서 URL을 제공하면서 웹 페이지를 다운로드하고 싶습니다. 본질적으로 하나의 프로세스가 stdout/file에 대한 URL을 지속적으로 생성하므로 wget 또는 curl로 파이프 처리하려고합니다. (원하는 경우 간단한 웹 크롤러로 생각하십시오.)wget 또는 curl from stdin

이것은 잘 작동하는 것 같다 :

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

을하지만 '꼬리 -f'를 사용하고 더 이상 작동하지 않을 때 (버퍼링 또는 wget과는 EOF을 기다리고 있습니다?) :

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

누구나 wget, curl 또는 다른 표준 유닉스 도구를 사용하여 솔루션을 제공 할 수 있습니까? 이상적으로 루프에서 wget을 다시 시작하지 않으려 고합니다. URL을 다운로드 할 때 계속 실행하십시오.

답변

6

xargs를 사용해야합니다. 예 :

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

'xargs'를 사용하면'wget'이 URL을 매개 변수로 받아들이므로 더 이상'-i -'가 필요 없습니다. 'tail -f 1.log | xargs -n1 wget -O - -q' – pabouk

+0

URL 당 새로운 wget 프로세스가 시작됩니다 –

+0

공유 컴퓨터에서 실행중인 경우 다른 사용자가 "ps"명령을 사용하여 매개 변수를 읽을 수 있음을 알고 싶을 수 있습니다. 그래서 귀하의 URL에 암호 등을 넣지 마십시오. 문제가 될 수있는 경우 표준 입력을 매개 변수로 바꾸지 않는 솔루션을 사용하십시오 (시스템에 대한 루트 액세스 권한이있는 관리자는 물론 가져 오는 URL을 확인할 수 있지만 아마도 무작위로 신뢰하는 것 이상으로 관리자를 신뢰할 수 있습니다). 다른 사용자). –

0

stdin을 인수로 변환하는 xargs을 사용하십시오.

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

내가 다른 답변에 댓글을 달았습니다. 공유 컴퓨터에서 실행중인 경우 다른 사용자가 "ps"명령을 사용하여 매개 변수를 읽을 수 있으므로 URL에 암호 등을 넣지 않아도됩니다. . 문제가 될 수있는 경우 표준 입력을 매개 변수로 바꾸지 않는 솔루션을 사용하십시오 (시스템에 대한 루트 액세스 권한이있는 관리자는 물론 가져 오는 URL을 확인할 수 있지만 아마도 무작위로 신뢰하는 것 이상으로 관리자를 신뢰할 수 있습니다). 다른 사용자). –

3

이 작업은 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

"output"또는 "remote-name"행은 선택 사항입니다. 출력을 표준 출력으로 보내려면 생략하십시오.따라서 각 줄의 시작 부분에 "url"을 추가하면됩니다 (예 : sed -e의/^/url/'을 통한 파이프) –

+0

OP의 버퍼링 문제는 여전히 여기에서 문제가됩니다. curl의 -K-는 한 번에 한 줄씩 입력을로드하지 않습니다. –

0

잘합니다 (tail -f이 가져

python -c $'import pycurl;c=pycurl.Curl()\nwhile True: c.setopt(pycurl.URL,raw_input().strip()),c.perform()' 통해 컬 배관하려고하면 아마 커맨드 라인 컬을 의미했다. 그리고 파이썬 한 줄짜리 라이브러리에서 호출하는 것이지만 여전히 똑같은 서버에서 여러 개의 URL을 요청할 경우 서버에 소켓을 유지하는 이점을 취하면서 즉시 각 URL을 가져 오는 것이 좋습니다. 순서대로. 그것은 완전히 강력하지는 않습니다 : 귀하의 URL 중 하나가 더프 경우, 전체 명령이 실패합니다 (적절한 파이썬 스크립트로 만들고 이것을 처리하기 위해 try/except을 추가 할 수 있습니다). 그리고 그것이 던질 작은 세부 사항도 있습니다 EOFError (EOF) (단, tail -f을 사용하는 경우 중요하지 않다고 가정합니다).