Leser: 27
1 2 3 4 5 6 7
open (my $pipe, "meinprogram |") or die "Problem mit Pipe: $!"; while (my $msg = <$pipe>) { # tu was mit $msg } close ($pipe) or die "Problem mit Pipe: $!";
1
2
3
4
5
6
7
8
9
__________________________________________
| |
| |
| --------------------------------- |
| | Info-Fenster | |
| | | |
| --------------------------------- |
| |
------------------------------------------
Guest perln00bLeider werden die Ausgaben des externen Programmes erst bei Beendigung des externen Programmes in meinem Fenster sichtbar.
Guest anonDiese Frage ist sinnlos; man kann aus der Antwort daraus nichts generelles ableiten, weil Shellausgaben typischerweise ungepuffert sind.
Guest perln00bWährend das externe Programm läuft gibt es laufend Statusmeldungen in die Shell aus.
Guest perln00bEs funktioniert soweit gut. Leider werden die Ausgaben des externen Programmes erst bei Beendigung des externen Programmes in meinem Fenster sichtbar.
Guest perln00bDas Problem ist auch vielleicht, das die GUI während des Ausführens des Programmes "X" blockiert ist. Also ist es vielleicht eher ein Problem der GUI selbst....
Guest perln00bwhile (my $msg = <$pipe>)
{
$text->insert('end', <$pipe>);
#$mw->update;
}
2010-01-18T18:09:25 pqdann schreibst du
$text->insert('end', <$pipe>);
[...]
ich vermute mal, du willst da statt <$pipe> $msg stehenhaben.
2010-01-18T19:08:57 pqich schrieb:
2010-01-18T18:09:25 pqdann schreibst du
$text->insert('end', <$pipe>);
[...]
ich vermute mal, du willst da statt <$pipe> $msg stehenhaben.
ergo: ersetze <$pipe> mit $msg.
das ergibt?
$text->insert('end', <$pipe>);
=>
$text->insert('end', $msg);
ich dachte, das wäre jetzt ziemlich eindeutig gewesen.
nochmal ganz logisch:
du liest mit while jeweils eine zeile in die variable $msg.
dann wirfst du die variable weg. wieso?
dadurch, dass du jetzt nicht wusstest, wie du aus meinen anmerkungen den code fixen kannst, vermute ich, dass du gar nicht so genau weisst, was der code macht?
Guest perln00bEs funktioniert jetzt!
1 2 3 4 5 6 7 8
open (my $pipe, "meinprogram |") or die "Problem mit Pipe: $!"; while (my $msg = <$pipe>) { $mw->update; ###Hauptfenster updaten $text->insert('end',"$msg");###$msg in text-Fenster schreiben } close ($pipe) or die "Problem mit Pipe: $!";
QuoteModedit GwenDragon: Bitte Perl-Code in Perl- oder Code-Tags stellen
1 2 3 4 5 6 7 8 9 10
open my $pipe, '-|', 'meinprogram' or die "Problem mit Pipe: $!"; while ( my $msg = <$pipe> ) { $text->insert( 'end', $msg ); $text->see( 'end' ); $mw->update; } # while close $pipe;
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 34 35 36
#!/usr/bin/perl use strict; use warnings; { package TestApp; use Wx qw(:everything); use base qw(Wx::App); sub OnInit { my( $frame ) = Wx::Frame->new( undef, -1, "TestApp", [20,20], [220,150] ); my $text = Wx::TextCtrl->new( $frame, -1, '', [-1,-1], [150,100], wxTE_MULTILINE ); my $main_sizer = Wx::GridBagSizer->new( 0, 1 ); $main_sizer->Add( $text, Wx::GBPosition->new( 0, 0 ), Wx::GBSpan->new(1,1), wxLEFT | wxALIGN_CENTER_VERTICAL , 2); $frame->SetSizer( $main_sizer ); $frame->SetAutoLayout(1); $frame->Show(1); open my $fh, '-|', 'perl testprogramm.pl' or die $!; while( my $line = <$fh> ) { $text->AppendText( $line ); } close $fh; 1; } } TestApp->new->MainLoop;
1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/perl use strict; use warnings; $|++; for my $i ( 1 .. 15 ) { print $i,"\r\n"; select undef, undef, undef, 0.5; }
$text->see( 'end' );