[Rd] two-way communication using Unix pipes
Prof Brian Ripley
ripley at stats.ox.ac.uk
Wed Nov 16 18:06:49 CET 2005
On Wed, 16 Nov 2005, Barry Rowlingson wrote:
> Jonathan Callahan wrote:
>
>> Can someone please explain to me exactly what R is doing with the the
>> standard IO handles and whether or not there is any simple way to convince
>> it to behave as if it were talking to a user at the other end of a keyboard
>> and terminal? I've already tried '--no-readline' but that doesn't solve my
>> problem.
>>
>
> This little noddy example works for me:
>
> #!/usr/bin/perl
>
> use FileHandle;
> use IPC::Open2;
>
> $pid=open2(*Reader, *Writer, "R --no-save");
> print Writer "x=runif(10);print(mean(x))\n";
> while($got=<Reader>){
> print "Got ".$got;
> }
>
> Of course, without the \n in the command string it doesnt work at all,
> but I dont see any problems with R reading from stdin and writing to
> stdout....
>
> This is on a Linux box, I dont think you mentioned an OS or platform...
Well `Unix' is in the subject line so I was assuming not Windows and
probably not MacOS.
To answer the (somewhat unrelated) question, R for Unix-alikes does
system.c: R_Interactive = isatty(0);
and so it will not `behave as if it were talking to a user at the other
end of a keyboard' unless stdin is `connected to a terminal'. (I am
pretty sure that pty's count, as that is what ESS uses, but this could be
OS-dependent.) Otherwise R does nothing with stdin, so standard rules
about e.g. line-buffering apply.
And --no-readline is only relevant if R is `connected to a terminal',
since R_ReadConsole talks directly to stdin (via fgets) if !R_Interactive.
R is Open Source and you can get definitive answers by reading the code.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-devel
mailing list