Thread Perl mit Kommandozeilenprogramm kommunizieren (Windows)
(79 answers)
Opened by bianca at 2013-09-10 13:07
Test mit IPC::Run auf Win 7 x64
Externes Programm doit.pl (ist in X:\bin\): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/perl use 5.010; use strict; use warnings; $|=1; say "Bitte Eingaben: "; while (<>) { chomp; say "Konvertiere '$_' -> '\u$_'"; # Mach riesengroße Buchstaben am Anfang ;) } 1; Hauptprogramm: Code (perl): (dl
)
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 37 38 39 40 41 #!/usr/bin/perl use 5.010; use strict; use warnings; #$ENV{IPCRUNDEBUG}="data"; # debug modus use IPC::Run qw( start pump finish timeout harness ); my (@prog, $in, $out, $err); # Incrementally read from / write to scalars. # $in is drained as it is fed to cat's stdin, # $out accumulates cat's stdout # $err accumulates cat's stderr # $h is for "harness". @prog = ('perl','X:\bin\doit.pl' ); my $h = start \@prog, \$in, \$out, \$err, 10; # Erste Ausgabe des aufgerufenen Programms pump $h until length $out; # Prüfen ob Eingabe erwünscht if ($out =~ /Eingaben:/mg) { # und Eingabe an externes Programm raus $in = "aoeiooeiikmdujkdu\n"; $in .= "abcdefg\n"; $in .= "a\n"; $in .= "ax\n"; $in .= "asseae\n"; } # Hol Ausgabe des externes Programm ab pump $h until length $out; # und Schluss ... finish $h or die "@prog beendet mit Fehlercode $?"; # zeig was das Programm ausgegeben hat say "PROGRAMMAUSGABE:"; say $out; Ergibt: PROGRAMMAUSGABE: Bitte Eingaben: Konvertiere 'aoeiooeiikmdujkdu' -> 'Aoeiooeiikmdujkdu' Konvertiere 'abcdefg' -> 'Abcdefg' Konvertiere 'a' -> 'A' Konvertiere 'ax' -> 'Ax' Konvertiere 'asseae' -> 'Asseae' teste mal ob es auch bei dir läuft! Last edited: 2013-09-19 17:10:42 +0200 (CEST) |