Yary has asked for the wisdom of the Perl Monks concerning the following question:
I've seen more than a few questions about the stdout/stderr handles with IPC::Open3, but not yet found people with the issue I'm having on stdin. Here's a one-liner that prints "Hello" on Unix, but hangs on Win32.
It is about as simplified as I can get it. There's a subprocess which just prints everything it reads from STDIN, that's the perl -pe 1. Around it is wrapped a call to open3, and the caller prints in a string, closes IN, which should generate an EOF for the child... but it never happens.perl -MIPC::Open3 -e "open3(\*IN,'>&STDOUT','>&STDERR',qw[perl -pe 1]) +;print IN 'Hello';close IN;wait"
I have tried printing a multi-line string, reading just one line with "readline" or "scalar <>" does work, showing that open3 is indeed communicating over IN. The child sees input written by the parent, it does not see the parent closing IN when running under Win32.
I am about to go to bed, and in the morning will just use open("|cmd") with some fancy redirects to get stdout and stderr where I want to go... unless a genius can point out what I'm doing wrong/a solution... preferably using only standard modules (or those that ship with ActiveState's distribution)
thanks, and sorry for brain cells lost, in advance
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: IPC::Open3 STDIN never sees eof on win32?
by Anonymous Monk on Dec 05, 2012 at 08:45 UTC | |
by Anonymous Monk on Dec 05, 2012 at 08:49 UTC | |
by Yary (Pilgrim) on Dec 05, 2012 at 12:11 UTC | |
by bulk88 (Priest) on Dec 05, 2012 at 19:35 UTC | |
by Yary (Pilgrim) on Dec 06, 2012 at 15:16 UTC |