Schrift
[thread]8058[/thread]

Expect / STDOUT: STDOUT des gestarteten Prozesses lesen



<< >> 3 Einträge, 1 Seite
docsnyder
 2006-06-06 15:20
#67016 #67016
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi Perl-Junkies!

Ich verwende Expect schon seit einer Weile und bin begeistert. Jetzt stehe ich aber vor einem Problem:

Ich möchte den Output des Prozesse, der mit Expect gestartet wird abgreifen und weiss nicht, wie ich da dran komme.

Wer weiss Rat?

Gruß, Doc

P.S. Habe schon in allen Threads gesucht, aber keine Lösung dazu gefunden.\n\n

<!--EDIT|docsnyder|1149592889-->
esskar
 2006-06-06 15:40
#67017 #67017
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich kenn expect nicht.
wie startest du das denn bis jetzt von perl aus.

du kennst backticks? also
Code: (dl )
my $stdout = `./program`;
docsnyder
 2006-06-06 16:14
#67018 #67018
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@esskar

Ja, natürlich kenne ich backticks (das wäre ja einfach), aber mit Expect startet man einen Prozess per Expect-API. Backticks alleine genügen nicht, da ich mit Expect einen Dialog (per STDIN/STDOUT des gestarteten Prozesses) handeln muss. Das sieht etwa so aus (<...> ist natürlich nicht PERL-Syntax, sondern bezeichnet einen Regex (<PATTERN>) bzw. einen String (<RESPONSE>)):

Code: (dl )
1
2
3
4
5
$exp->raw_pty(1);  
$exp->spawn(sprintf("%s %s -l %s %s", $cmd, $sshOpt, $userObj->user(), $remoteHost));
$exp->expect(10000, [ <PATTERN 1> => sub { $_[0]->send(<RESPONSE 1>); } ]);
...
$exp->expect(10000, [ <PATTERN n> => sub { $_[0]->send(<RESPONSE n>); } ]);


So, und bei dem Versuch, das Problem näher zu erklären, bin ich auf die Lösung gekommen: Da ich zur Erkennung der Ausgaben des Prozesses (auf die ich reagieren will, einen Regex angebe, frage ich nach dem entsprechenden


Code: (dl )
$exp->expect(10000, [ <PATTERN> => sub { $_[0]->send(<RESPONSE>); } ]);


einfach $1 ab, der dann den Match enthält.

Danke also für Deine Antwort, denn nur dadurch musste ich das Problem näher spezifizieren und kam zur Lösung.

Cheers, Doc
<< >> 3 Einträge, 1 Seite



View all threads created 2006-06-06 15:20.