[perl] direct output printen

Pagina: 1
Acties:

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 12:42

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
Hoe kun je in Perl 'realtime' naar de outpur (HTML) printen?

Ik heb nu dus een script .. die doet het een en ander, en gooit daarvan een output op het scherm.
Echter als het volgende doe:
code:
1
2
3
4
bla bla doe iets
print "$resultaat"
bla bla doe nog meer
print "$resultaat2"

Dan komt het beide in 1 keer op het scherm, als het sctipt klaar is.
Die 2e bewerking duurt namelijk een xx aantal seconden (dus het is ook niet zo dat het zo snel gaat dat ik het niet zie).
Ik wil dus dat als de eerste bewerking klaar is, dat er dan iets ophet scherm komt -->script gaat verder met iets doen --> is klar --> weer wat op scherm printen.

Als hiereen bepaalde methode/term voor is, dan zijn enkele steekwoorden ook voldoende, dan weet ik iig waarnaar ik moet zoeken met google.

Braaikamer - Smoke&BBQ


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15:00

TrailBlazer

Karnemelk FTW

Ja eindelijk kan ik het tegen een modje zeggen
UTFS >:)

ik heb dit tijden geleden ook hier gevraagd namelijk maar mischien verdwenen met BC3

maar wat je moet doen bovenaan je scriptje dit zetten
code:
1
$|=1;

edit Ik kan het topic inderdaad niet meer vinden dus
you are forgiven

Verwijderd

Op donderdag 11 april 2002 13:31 schreef TrailBlazer het volgende:
code:
1
$|=1;
opmerking:
$|*

If set to nonzero, forces a flush after every write or print on the currently selected output channel. Default is 0. Note that STDOUT will typically be line buffered if output is to the terminal and block buffered otherwise. Setting this variable is useful primarily when you are outputting to a pipe, such as when you are running a perl script under rsh and want to see the output as it's happening. (Mnemonic: when you want your pipes to be piping hot.)

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 12:42

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
>:)

<li> Geeft geen resultaat
<li> Zoals gezegd weet ik niet waarop ik moet searchen
<li> heb jegeen link naar dat topic ?

Toch bedankt hoor :*

EDT: Zowel met $|=0 als &|=1 geeft het geen verschil.
Het script loop eerst helemaal uit, en dan pas komt de ouptu in de pagina te staan

Braaikamer - Smoke&BBQ


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15:00

TrailBlazer

Karnemelk FTW

Op donderdag 11 april 2002 13:35 schreef Koffie het volgende:
>:)

<li> Geeft geen resultaat
<li> Zoals gezegd weet ik niet waarop ik moet searchen
<li> heb jegeen link naar dat topic ?

Toch bedankt hoor :*
Werkt dit niet dat is vaag. Ik weet zeker dat dit moet werken. edit: nog ff opgezoegd inmijn perl bible Programming Perl van O'Reilly en daar zeggen ze
If set to nonzero, forces an fflush(3) after write or print on the currently selected output channel.
Ik kon topic ook niet meer vinden BTW maar had ik al gedit in post hierboven

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 12:42

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
Ik zal het even verduidelijken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sub get_name {

    if ($get{ip} ne '') { $ip = $get{ip}; }
    if ($contents{ip} ne '') { $ip = $contents{ip}; }

    $status = "" ;
    @numbers = split(/\./, $ip);
    $ip_number = pack("C4", @numbers);
    ($resolved_name) = (gethostbyaddr($ip_number, 2))[0];

    if ($resolved_name eq "") {
        $resolved_name= "unresolved";
    } else {
    }

print <<"HTML";
    Hostname for <b>$ip</b> is:  <input type="text" name="textfield" value="$resolved_name"><br>
    Pinging ...
    <HR size=1>
HTML


if ($contents{ping} eq "yes") {
     require net::ping;
     $host= $resolved_name;
    $p = Net::Ping->new(icmp);
    $status = "BTW: $host is alive.\n" if $p->ping($host);
    if ($status eq "") { $status = "Dood"; }
    $p->close();
}

print ".. finished; $status";
}

Gezien het feit dat die net::ping er nogal lang over doet, wil ik dus eerst al de resolve resultaten op het scherm toveren.
Daarna dus (alstie klaar is) de ping resultaten.
Echter hij voert eers het hele script uit, en plempt dan alle output in de browser.
het gaat dus puur om de output, commentaar op typo's of mijn vage manier van scriten is niet nodig :P

Braaikamer - Smoke&BBQ


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15:00

TrailBlazer

Karnemelk FTW

Op donderdag 11 april 2002 13:44 schreef Koffie het volgende:

Gezien het feit dat die net::ping er nogal lang over doet, wil ik dus eerst al de resolve resultaten op het scherm toveren.
Daarna dus (alstie klaar is) de ping resultaten.
Echter hij voert eers het hele script uit, en plempt dan alle output in de browser.
Hee het gaat om een webpage ja dat is heel wat anders natuurlijk he. Probeer het eens vanaf de command prompt uit te voeren. Dan zal je zien dat het wel goed gaat. Dat de pagina stuk voor stuk wordt geschreven.
Ik denk dat de server weigert de page te serveren terwijl het document nog niet af is.

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 12:42

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
Je hebt gelijk ... via de prmpt werkt het wel goed.
Hmmz .. dan moet ik maar eens verder zoeken (ik heb ze wel eens gezien, van die perl scrits die delinux prompt laten pingnen en dan 4 regels output stuk voor stuk in je IE browser).

Het is iig een stuk duidelijker nu.
Thx

Braaikamer - Smoke&BBQ


Verwijderd

dit werkt bij mij hoor:
code:
1
2
3
4
5
6
7
8
9
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";

$|=1;

for ($i=1;$i<=10;$i++){
  print "$i<br>";
  sleep(5);
}

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 12:42

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
En weer een gewldige tekortkoming van de implementatie van Perl onder NetWare :(
Vanaf de prompt doettie netjes elke 5 seconde een print, echter via een browser word eerst het hele script gerund, en daarna pas de output gegeven.

Braaikamer - Smoke&BBQ


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15:00

TrailBlazer

Karnemelk FTW

Op donderdag 11 april 2002 14:41 schreef Koffie het volgende:
En weer een gewldige tekortkoming van de implementatie van Perl onder NetWare :(
Vanaf de prompt doettie netjes elke 5 seconde een print, echter via een browser word eerst het hele script gerund, en daarna pas de output gegeven.
Ik weet niet of het daarin zit of ergenas anders in. Ik kan me voorstellen dat een server wil weten hoe een pagina er helemaal uitziet voordat hij hem verstuurt.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
'k Denk dat IE hele paragrafen wil laten zien. Als je voor elke regel een <p>'tje zet gaat 't waarschijnlijk wel goed (mits Perl inderdaad direct flusht; $|=1;).

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 15:00

TrailBlazer

Karnemelk FTW

Op donderdag 11 april 2002 20:31 schreef Soultaker het volgende:
'k Denk dat IE hele paragrafen wil laten zien. Als je voor elke regel een <p>'tje zet gaat 't waarschijnlijk wel goed (mits Perl inderdaad direct flusht; $|=1;).
Ik denk niet dat ie het probleem is maar dew server. IE zie ik zovaak een pagina laden terwuijl het docu nog niet binnen is.

  • BOOTZ
  • Registratie: Maart 2001
  • Laatst online: 09:46
ik heb het eens op een andere site gezien, daar zetten ze </body></html> op een punt waar ze iets wilden laten zien. hoe ze dat verder gescript hebben weet ik niet, maar dit was iig de html

Maak je eigen poll

Pagina: 1