$rc = system($impKorr." -cfgfile ".$cfgfile." -dbuser ".$USER." -dbpassword ".$PWD);
1 2 3 4 5 6 7 8
open(my $pipe, '-|', $impKorr, -cfgfile => $cfgfile, -dbuser => $USER, -dbpassword => $PWD) or do { die "failed to spawn process: $!"; }; my @output = <$pipe>; # oder was auch immer man mit der Programmausgabe anfangen will my $rc = close($pipe) or do { die "failed to close process: $!" if ($!); $?; };
my @output = <$pipe>;
my @output = <$pipe>;
1 2 3 4 5 6 7 8 9 10 11
{ open my $out, '>', '/was/auch/immer.out' or do { die "failed to open output file: $!"; }; while (my $line = <$pipe>) { print $out $line; } close $out or do { die "failed to close output file: $!"; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use IPC::Run qw/run/; eval { # Externen Prozess ausführen, # STDIN schließen, STDOUT und STDERR in /was/auch/immer.out umleiten run([ $impKorr, -cfgfile => $cfgfile, -dbuser => $USER, -dbpassword => $PWD ], '<&-', '>&', '/was/auch/immer.out'); # Externer Prozess prinzipiell erfolgreich ausgeführt, # Rückgabewert überprüfen: my $rc = $?; }; if ($@) { # Externer Prozess konnte nicht ausgeführt werden, # Fehler behandeln: warn $@; }
kommando >datei.txt 2>&1
1 2 3 4
my $output = $srootpath."sysoutput.txt"; my $cmd = $impKorr." -cfgfile ".$cfgfile." -dbuser ".$USER." -dbpassword ".$PWD; $rc = system($cmd." >".$output);
$rc = system($cmd." 2>".$output);
$rc = system($cmd." 2>&1".$output);
Guest dbAlso versucht habe ich, unter Windows,
[...]
Warum ist es mit ">" so einfach, aber "2>" macht alles so kompliziert?!
Guest bdHabe mir jetzt das Modul runtergeladen und im Internet gelesen, dass ich nach entpacken des Archivs, in dem sich das Modul befindet, nur noch den darin enthaltenen Ordner "lib" in die Perl-Verzeichnisstruktur kopieren soll.
Guest bdHabe mir jetzt das Modul runtergeladen und im Internet gelesen [...]
QuoteUnter anderen Systemen wie Windows, wo Sie normalerweise Zugang zu allen Verzeichnissen auf dem Rechner haben, kopieren Sie einfach den Inhalt des Unterverzeichnisses lib, das nach dem Entpacken existieren sollte, in das Verzeichnis lib unterhalb des Installationsverzeichnisses von Perl, sofern es sich um ein reines Perl-Modul handelt. Wenn das Modul mit C-Erweiterungen arbeitet, benötigen Sie einen C-Compiler, oder Sie benutzen das in der ActivePerl-Distribution mitgelieferte Tool ppm, um eine bereits kompilierte Version des Moduls zu installieren.
Quote$ perl Makefile.PL
$ make
$ make test
$ make install
Quote
Quoteund installiert später auf dem gewünschten Rechner mit c:\>ppm install modulname.ppd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use IPC::Open3; # Open output in parent open OUTFILE, '>', '/where/to/put/output' or do { die "error opening output file: $!"; }; # Spawn child inheriting parent input and redirecting all output my $pid = open3( '<&STDIN', '>&OUTFILE', undef, $impKorr, -cfgfile => $cfgfile, -dbuser => $USER, -dbpassword => $PWD ) or do { die "error spawning external process: $!"; }; # Close output in parent close OUTFILE or do { warn "error closing output file: $!"; }; # Reap child and determine return code my $rc = (waitpid($pid, 0) == $pid ? $? : undef);
Guest bdWas die uralt Steinzeit-Version von Perl angeht habt ihr alle vollkommen recht. Leider habe ich darauf keinen Einfluss, weil der Perl-Verantwortliche dieser Firma wohl seit Jahren keine Zuständigkeit mehr verspürt hat. Schade.