in reply to Communicate with child process via stdin, stdout
Are you on Microsoft Windows? Try this example if you are on a unix style system.
#!/usr/bin/perl use warnings; use strict; use IPC::Open3; use IO::Select; #interface to "bc" calculator my $pid = open3(\*WRITE, \*READ,\*ERROR,"bc"); my $sel = new IO::Select(); $sel->add(\*READ); $sel->add(\*ERROR); my($error,$answer)=('',''); while(1){ print "Enter expression for bc, i.e. 2 + 2\n"; chomp(my $query = <STDIN>); #send query to bc print WRITE "$query\n"; foreach my $h ($sel->can_read) { my $buf = ''; if ($h eq \*ERROR) { sysread(ERROR,$buf,4096); if($buf){print "ERROR-> $buf\n"} } else { sysread(READ,$buf,4096); if($buf){print "$query = $buf\n"} } } } waitpid($pid, 1); # It is important to waitpid on your child process, # otherwise zombies could be created.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Communicate with child process via stdin, stdout
by Eliya (Vicar) on Nov 20, 2011 at 13:26 UTC | |
by locked_user sundialsvc4 (Abbot) on Nov 20, 2011 at 13:52 UTC | |
by Eliya (Vicar) on Nov 20, 2011 at 14:03 UTC |