On 13-09-23 6:34 PM, Simon Urbanek wrote:
Duncan,

On Sep 23, 2013, at 10:20 PM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote:

On 13-09-23 2:17 PM, Jeroen Ooms wrote:
Is there any way to capture output (both stdout and stderr) from
install.packages? Solutions like sink and capture.output don't work
because the install.packages calls out to system2 which is executed in
a separate process:

     test <- capture.output(install.packages("MASS"))

The system2 function does have arguments stdout and stderr but afaik
these cannot be controlled via install.packages. I'm a bit reluctant
to start rolling my own version of install.packages just for this
reason.

Is there any way to somehow grab this output? Or alternatively, is
there a way to make R pipe stdout and stderr from system2 in such a
way that they can be captured with sink or capture.output in the R
parent process?

See the recent thread 
<https://mailman.stat.ethz.ch/pipermail/r-devel/2013-September/067552.html> for 
an approach to this.


Can you, please, elaborate on how it is that relevant? The linked thread is talking about 
sink() which it irrelevant here (to quote the original e-mail "Solutions like sink 
and capture.output don't work because the install.packages calls out to system2 which is 
executed in a separate process:"). Something I missed?

Brian Ripley's reply describes how it is done in the tools package. For example, as I sent privately to Jeroen,

x <- system2("Rscript", "-e \"install.packages('MASS',
repos='http://probability.ca/cran')\"", stdout=TRUE, stderr=TRUE)

captures all of the output from installing MASS. As Jeroen pointed out, that isn't identical to running install.packages() in the current session; a real version of it should fill in more of the arguments, not leave them at their defaults.

Duncan Murdoch



Re original question: there is keep_outputs which allows to re-direct a copy of 
the output into a file - at least for the actual install part of it.
On top of my head for full capture I can only think of custom C code that will 
re-direct stderr/out FDs as desired (it's really trivial to re-direct to files, 
for dynamic capture it's a little more involved but there are examples that do 
that).

Cheers,
Simon



______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to