뒷면을 사용하여 호출하면 컬의 출력을 Perl의 변수로 어떻게 얻습니까?
문제
컬 호출의 응답을 Perl의 변수로 얻으려고 노력하고 있습니다.
my $foo = `curl yadd yadda`;
print $foo;
작동하지 않습니다. 명령 줄에서 이것을 실행하면 Curl Call은 터미널에서 모든 출력을 올바르게 인쇄하지만 변수는 해당 데이터로 채워지지 않습니다.
Perl Curl Lib를 설치하고 호출하지 않고이 작업을 수행하는 방법이 있습니까?
해결책
아마도 그 물건을 stderr로 보낼 것입니다. 노력하다
my $foo = `curl yadd yadda 2>&1`;
다른 팁
당신은 또한 보는 것을 고려할 수도 있습니다 lwp :: 사용자 기관 또는 lwp :: 간단합니다.
정말로 무엇을하고 싶습니까? 사용 curl
모든 비용으로 웹 페이지의 내용을 잡으시겠습니까?
이 작업을 수행하는 더 많은 플로어 방법 (이 작업을 수행 해야하는 다음 시스템에 설치되거나 설치되지 않을 수있는 외부 프로그램에 의존하지 않음)은 다음과 같습니다.
use LWP::Simple;
my $content = get("http://stackoverflow.com/questions/1015438/")
or die "no such luck\n";
왜 GET가 실패했는지 또는 같은 사이트에서 여러 페이지를 가져 오려면 조금 더 많은 기계를 사용해야합니다. perldoc lwpcook
당신을 시작할 것입니다.
쉘에서 2>
Fileno 2를 리디렉션하는 것을 의미합니다. Fileno 2는 항상 프로그램이 Stderr로 보는 것입니다. 마찬가지로 Fileno 0은 stdin이고 fileno 1은 stdout입니다. 그래서 당신이 말할 때 2>&1
당신은 쉘에게 stderr (fileno 2)를 stdout (fileno 1)로 리디렉션하도록 지시합니다. 백 티크 연산자는 쉘을 사용하여 지정된 명령을 실행하므로 쉘 리디렉션을 사용할 수 있습니다.
my $foo = `curl yadda yadda 2>&1`;
Curl에게 출력을 STDOUT로 리디렉션하라고 지시하고 있으며 백틱 연산자가 STDOUT를 잡기 때문에 원하는 것을 얻습니다.
이 시도:
$var = `curl "http://localhost" 2>/dev/null`;
print length($var)
curl
stderr에 대한 진행 정보를 표시하여 /dev /null로 리디렉션하면 무슨 일이 일어나고 있는지 쉽게 볼 수 있습니다.
이것은 내 시스템에서 작동합니다.
#!/usr/bin/perl
use strict;
use warnings;
my $output = `curl www.unur.com`;
print $output;
__END__
C:\> z1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
등.
파일이 파일 인 것처럼 파이프를 열 수 있습니다.
$url = "\"http://download.finance.yahoo.com/d/quotes.csv?s=" .
"$symbol&f=sl1d1t1c1ohgvper&e=.csv\"";
open CURL, "curl -s $url |" or die "single_stock_quote: Can't open curl $!\n";
$line = <CURL>;
close CURL;
캡처하려는 출력 중 일부는 표준 아웃이 아닌 표준 ERR 일 수 있습니다. 이 시도:
my $foo = system "curl http://www.stackoverflow.com";
print $foo;