Thread Perl mit Kommandozeilenprogramm kommunizieren (Windows) (79 answers)
Opened by bianca at 2013-09-10 13:07

GwenDragon
 2013-09-19 17:07
#170394 #170394
User since
2005-01-17
14711 articles
Admin1
[Homepage]
user image
Test mit CPAN: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)

View full thread Perl mit Kommandozeilenprogramm kommunizieren (Windows)