#!/usr/bin/perl use strict; use warnings; use IPC::Open3; use IO::Handle; STDOUT->autoflush(1); my $prog = join(' ',qw(perl doit.pl)); print "Rufe Programm '$prog' auf \n"; my ($in,$out,$err,$pid,$ausgabe,$buffer); eval { $pid = open3($in,$out,$err,$prog); $out->blocking(0); }; die "Gescheitert: '$@'" if $@; if (defined $pid) { print "PID '$pid', lese...\n"; for( my $i = 1; $i <= 100000; $i++ ) { undef $buffer; #select(undef, undef, undef, 0.25) # Verzoegerung my $bytes = sysread($out, $buffer, 4096); $ausgabe .= $buffer if $buffer; #last if $ausgabe && ! $bytes; # Abbruch sobald einmal nichts mehr gelesen wurde } print "Fertig mit lesen\n"; if (defined $ausgabe) { print "\n\nErhalte:\n".('=' x 30)."\n$ausgabe"; my $code = ; chomp($code); print $in $code."\n"; sysread $out,$ausgabe,4096; print "\n\nErhalte:\n".('=' x 30)."\n$ausgabe"; } } else { die "Keine PID"; }