뒷면을 사용하여 호출하면 컬의 출력을 Perl의 변수로 어떻게 얻습니까?

StackOverflow https://stackoverflow.com/questions/1015438

  •  06-07-2019
  •  | 
  •  

문제

컬 호출의 응답을 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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top