كيف يمكنني الحصول على مخرجات الضفيرة إلى متغير في Perl إذا قمت باستدعائها باستخدام backtics؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

أحاول الحصول على استجابة مكالمة حليقة إلى متغير في Perl.

my $foo = `curl yadd yadda`;

print $foo;

لا يعمل.عندما أقوم بتشغيل هذا في سطر الأوامر، يقوم استدعاء الضفيرة بطباعة جميع مخرجاته بشكل صحيح في الجهاز، لكن المتغير غير ممتلئ بتلك البيانات.

هل هناك طريقة للقيام بذلك دون تثبيت واستدعاء Perl Curl Lib؟

هل كانت مفيدة؟

المحلول

وربما يرسل الاشياء لستدير. محاولة

my $foo = `curl yadd yadda 2>&1`;

نصائح أخرى

قد تفكر أيضًا في النظر إلى LWP::UserAgent او حتى LWP::بسيطة.

وماذا تريد حقا أن تفعل؟ استخدام curl بأي ثمن، أو الاستيلاء على محتويات صفحة الويب؟

وهناك طريقة أكثر perlish للقيام بذلك (والتي تعتمد على أي برامج خارجية قد تكون أو لا تكون مثبتة على الجهاز القادم حيث كنت في حاجة للقيام بذلك) ستكون كما يلي:

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 دائما ما يرى البرنامج كما ستدير. وبالمثل، fileno 0 هو ستدين وfileno 1 غير المعياري. لذا، عندما يقول 2>&1 كنت تقول قذيفة لإعادة توجيه ستدير (fileno 2) في المعياري (fileno 1). منذ مشغل backticks يستخدم قذيفة لتشغيل الأمر الذي تحدده، يمكنك استخدام قذيفة إعادة توجيه، لذلك

my $foo = `curl yadda yadda 2>&1`;

وهو قول حليقة لإعادة توجيه انتاجها الى المعياري، ومنذ المشغل الفاصلة العليا المائلة يمسك المعياري، وتحصل على ما كنت أبحث عنه.

وجرب هذا:

$var = `curl "http://localhost" 2>/dev/null`; 
print length($var)

ويعرض curl معلومات التقدم على ستدير، وإعادة توجيه ذلك إلى / ديف / لاغية يجعل من الاسهل لمعرفة ما يجري.

وهذا يعمل على نظام بلدي:

#!/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;

قد يكون بعض من إخراج تريد التقاط هو في يخطئ القياسية، وليس معيار بها. جرب هذا:

my $foo = system "curl http://www.stackoverflow.com";
print $foo;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top