On Fri, Feb 6, 2009 at 14:31, Ice Man <wjharris...@optonline.net> wrote:
> Ok ..... so I have to start a program which is written in java.
>
> #!/local/bin/perl
>
> my $command = "/aa/bb/c/executable \&";
> my $ret = 0;
>
> $ret = `$command`;
>
> exit $ret;
>
> The normal behavior of this executable is to list some information but
> it never returns you to a prompt.  You have to hit the return key to
> get the shell prompt back.
>
> The same thing is happening to this program.  Is there a way in perl
> to pass a return "\n" on the command to be executed that would return
> a prompt to the program so it does not hang?  I have tried the
> following:
>
snip

It sounds like you need IPC::Open2* or IPC::Open3**.  They allow you
to run an external command and control its STDIN, STDOUT, and, in the
case of IPC::Open3, STDERR.  Try something like this:

#!/usr/bin/perl

use strict;
use warnings;

use IPC::Open2;

#if this is the child
my $arg = shift;
if (defined $arg and $arg eq 'you are the child') {
        print "I am the child\nwaiting for user to hit enter...\n";
        <STDIN>;
        exit;
}

#if this is the parent
print "I am the parent, getting ready to run the child\n";
#call myself with the argument "you are the child"
open2 my $child_stdout, my $child_stdin, $0, "you are the child";

print "child ran, sending return to it now\n";
#send a return to the child to get it to quit
print $child_stdin "\n";

#read what it wrote to the stdout
print "child said:\n", map { "\t$_" } <$child_stdout>;



-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to