Bir dizi başka program çalıştırması ve çıktıları için çıktılarını toplaması gereken bir programım var. Her şey standart çıktı çıktığında çalışıyor. Benim iki sorunlara götürüyorPerl'de çıktı olarak günlüğe kaydetme
:
nasıl yakalayabilir hem
STDIN
ve bir dosyada başka bir programınSTDERR
?programı hattına sıkışıp alacak (sadece
STDERR
veya çıkış) hayır hiç çıkışı yoksa: Başka olası çıkış için programın beklemesi nasılwhile (<$input>)
Belirsiz çalışma süresi programı, ve programın yürütme bittiğinde hiçbir çıkış yoksa devam eder. İşte
kodunun o bölümdürmy $pid = open (my $input, '-|', "$prog $args")
or push @errors, "A failute has occurred in $prog $args";
if(not @errors){
while (<$input>){ #POSSIBLE LOCATION FOR HANG UP IF NO PRINTING IS DONE
if($input =~ /^END\n$/){
last;
}
print $fh $_;
}
}
else{
print $fh "An error has occurred with executing \"$prog $args\"";
}
not: $fh
benim günlük dosyasına yazmak için kullanılan benim dosya işleyicisi ve @errors
içten benim programda hataları raporlamak için kullanılır.
DÜZENLEME: Proc::Reliable rotayı çalışırken yaşanan Bir sorun STDOUT
ve STDERR
üzerindeki etkileri sonra var gibi görünüyor yani, ben her çağrıdan sonra bu çalışmasına düzeltmek gerekir. Bu benim kodumda başka bir soruna yol açar. Paralel olarak çalışıyorum ve herhangi bir değişiklikve STDERR
tüm iş parçacığı (en az Windows kullanarak).
IO::CaptureOutput benim için aynı sorunu var, ancak gerçekleşmesi aşağıdaki hatayı içten STDOUT
ve STDERR
jumbling düzeltmeye çalışır ve neden: Proc::Reliable de
Couldn't remove temp file 'C:\Users\SBLAKE~1\AppData\Local\Temp\m8E3pUGfOS' - Permission denied at C:/Perl/site/lib/IO/CaptureOutput.pm line 82
[Duplede stderr, stdout ve çıkış kodlarını bir kerede nasıl yakalarsınız?] Olası bir kopyası (http://stackoverflow.com/questions/109124/how-do-you-capture-stderr- stdout'u-ve-çıkış kodu-all-at-once-in-perl) – daxim