Perl komut dosyasından bir SVN etiketinin varlığını kontrol etmeye çalışıyorum. Bu yüzden, svn info $url
numaralı telefonu arayın, çıkış kodunu okuyun ve standart çıktıları ve standart hata akışlarını bastırın. Ancak, ben (orada bir etiket hakkında SVN sormak muhtemelen daha iyi yolları vardır, ama bu noktası burada değil) zarif bunu için mücadele: $output
içine koyarkenPerl'de hem çıkış hem de çıkış kodunu yakalarken harici bir komut dosyasını nasıl çalıştırırım?
my $output = `svn info $url/tags/$tag`;
Bu çıktısını almaz. Çıkış kodu kayboldu.
my $output = `svn info $url/tags/$tag 2>&1`;
Bu STDERR ve STDOUT hem bastırır ve $output
içine ikisini de koyar. Çıkış kodu tekrar kaybolur.
Bu, çıkış kodunu yakalar, ancak gerçek çıktı ve hata akışı kullanıcıya görünür.
open(STDERR, q{>}, "/dev/null");
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
select(STDOUT);
print ("Tag doesn't exist!");
do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";
Bu STDOUT ve STDERR öldürür ve çıkış kodu yakalar, ama orijinaline geri STDOUT geçmek için hatırlamak zorunda kalacak çünkü çirkin.
Yani, daha zarif bir çözüm var mı?
çıkış kodu $ 'yüksek bayt olduğunu aday olacağını?', 'm $ ihtiyaç böylece? >> 8'. –
@brian: bunu işaretlediğiniz için teşekkürler. – bhups
Cevabınızı düzenlemeniz gereken bir şeydi. :) –