Jemand zu Hause?
$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: $!"; } }
IPC::Run. Das könnte zum Beispiel so aussehen: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?!
IPC::Run ans Herz legen, das ist portabel und kann auch komplizierte Pipelines erzeugen.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-ProblemGuest 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.
ModuleWieInstalliereIchEinModul um zu wissen wie Module installiert werden.
Guest bdHabe mir jetzt das Modul runtergeladen und im Internet gelesen [...]
ModuleWieInstalliereIchEinModul
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-ProblemQuoteUnter 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.
IPC::Run ein solches...?
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
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem
IPC::Open3 anschauen (ist seit Perl 5.x im Sprachkern) und Dich mit dem Verhalten von open, waitpid, select und close befassen.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.