On Fri, Feb 6, 2009 at 14:31, Ice Man <[email protected]> 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: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/