Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^2: Communicate with child process via stdin, stdout

by Anonymous Monk
on Nov 20, 2011 at 01:54 UTC ( [id://939023]=note: print w/replies, xml ) Need Help??


in reply to Re: Communicate with child process via stdin, stdout
in thread Communicate with child process via stdin, stdout

Hi,

thanks for response and yes, I'm sorry - wasn't specific enough....

Another try. I have command line utility that communicates with central software router under LMCE system. Whatever script receives from router it sends to stdout and whatever it receives on stdin, will be sent to router.

Therefore I need to have two way communication with that script from my Perl app.

Here is the code I'm trying, but get nothing (utility works from command line - it sends string to stdout) :
#! /usr/bin/perl use warnings; use strict; use IPC::Open2; my $pid = open2 my $out, my $in, "/usr/pluto/bin/DCE-Whisperer -d 38 - +r 192.168.0.51"; die "$0: open2: $!" unless defined $pid; #print $in "PING"; my $sum=undef; while (1) { $sum = <$out>; if ($sum) { print ("Got from DCERouter(out): $sum\n") ; print $in "reply txt OK\n"; $sum=undef; }; } ; close $in or warn "$0: close: $!"; close $out or warn "$0: close: $!";


Thanks in advance for any help...

regards,

Rob.

Replies are listed 'Best First'.
Re^3: Communicate with child process via stdin, stdout
by quester (Vicar) on Nov 20, 2011 at 06:41 UTC

    I don't have a copy of DCE-Whisperer to test with, so take this with a grain of salt...

    If I change the child process to /bin/cat, I can get the script to run if I uncomment the print $in AND change it to

    print $in "PING\n";

    which works because (in this case) it flushes the buffer for $in. You could also flush the $in buffer with

    $|=1;

    depending on the child process - for example cat doesn't work without a "\n".

    However, you may be running into buffering issues with DCE-Whisperer as well. As the documentation for IPC::Open2 mentions, "The big problem with this approach [that is, IPC::Open2 itself] is that if you don't have control over source code being run in the child process, you can't control what it does with pipe buffering.... The IO::Pty and Expect modules from CPAN can help with this, as they provide a real tty (well, a pseudo-tty, actually), which gets you back to line buffering in the invoked command again."

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://939023]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (3)
As of 2024-04-19 21:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found