I am not sure what the issue is here. Do you want to capture both stderr
and stdout (use 2>1 in the command with an sh-like shell), or is the
problem that you don't get immediate output?
The latter is a Perl issue: you need to circumvent output buffering.
See e.g
http://perl.plover.com/FAQs/Buffering.html
Sundar Dorai-Raj wrote:> Hi,
>
> I have an application in perl that prints some output to either stderr
> or stdout.
>
> Here's an example:
>
> # tmp.pl
> print STDERR "starting iterator\n";
> for(my $i = 0; $i < 1000000; $i++) {
> print $i . "\n";
> }
>
> # tmp.R
> con <- pipe("perl tmp.pl")
> r <- readLines(con, n = -1)
> close(con)
>
> However, the second line stalls until the perl for-loop finishes. What I
> would like is to process each line as it comes. E.g. something like:
>
> while(TRUE) {
> r <- readLines(con, n = 1) # read one line
> if(r == "10000") print(r)
> if(length(r) == 0) break
> }
>
> Of course, this won't work since I'm not calling readLines
> appropriately. Answers must work on Windows but may include cygwin
> utilities if necessary. Any advice would be appreciated. Version info at
> the end if it matters.
>
> Thanks, --sundar
>
>
> > version
> _
> platform i386-pc-mingw32
> arch i386
> os mingw32
> system i386, mingw32
> status
> major 2
> minor 8.0
> year 2008
> month 10
> day 20
> svn rev 46754
> language R
> version.string R version 2.8.0 (2008-10-20)
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible 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