tange has asked for the wisdom of the Perl Monks concerning the following question:
open3 only takes STDIN, STDOUT and STDERR. If the command being run uses other file descriptors then open3 cannot capture those:
I have looked into IPC::Run::run which seems to be able to deal with that, but I also need the PID and I found no way for IPC::Run::run to give me that. Also IPC::Run is not installed on many of the old distributions supported by GNU Parallel, whereas open3 is.echo foo # Can be captured echo foo >&2 # Can be captured echo foo >&3 # Cannot be captured (with open3)
How can I wrap open3 so that I can capture file descriptors 3..61 in the same way I can capture STDOUT and STDERR?
BackgroundThis is intended for a possible extension of GNU Parallel, so you can do:
without having the output from different jobs mixed. Right now only STDOUT and STDERR are buffered and thus guaranteed not to mix.# Currently mixes output due to fd 3 not buffered parallel 'echo {} start >&3;sleep 10;echo {} end >&3' ::: a b c 3> +out.file
# This currently works parallel 'echo {} start >&2;sleep 10;echo {} end >&2' ::: a b c 2> +out.file
Back to
Seekers of Perl Wisdom