Re: [Rd] Problem with system2(), directing STDERR to a file

From: Dan Tenenbaum <dtenenba_at_fhcrc.org>
Date: Wed, 10 Nov 2010 21:11:09 -0800

ink1">Hi Keith,

The problem is not with tempfile(), and is not really a problem of whether a file exists or not. The problem is that system2() does not put the contents of stderr into the file. Here is a demonstration without the use of tempfile(), using a pre-existing output file:

klediment:~ dante$ echo "Hello" > output.txt klediment:~ dante$ cat output.txt
Hello
klediment:~ dante$ R -q
> system2("./test.rb", stderr="output.txt")
stderrstdout> q("no") # should only see "stdout" in console, "stderr" should go to file
klediment:~ dante$ cat output.txt
Hello
klediment:~ dante$ R -q
> system2("./test.rb", stdout="output.txt") # works correctly
stderr> q("no")
klediment:~ dante$ cat output.txt
stdoutklediment:~ dante$

My sessionInfo() follows, but I got the identical behavior on R 2.12 (release version) and R 2.13.

Thanks,
Dan

> sessionInfo()

R version 2.12.0 Patched (2010-10-15 r53335) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets methods base

On Wed, Nov 10, 2010 at 7:33 PM, Keith Satterley <keith_at_wehi.edu.au> wrote:

> Looking at help for tempfile,
>
> "tempfile" returns a vector of character strings which can be used as names
> for temporary files.
>
> and
>
> For "tempfile" a character vector giving the names of possible
> (temporary) files. Note that no files are generated by "tempfile".
>
>
> try a file.create(t) after tempfile()
>
> cheers,
>
> Keith
>
>
> Dan Tenenbaum wrote:
>
>> According to ?system2, I should be able to direct the output of STDERR to
>> a
>> file by giving the filename as a character vector to the "stderr"
>> argument.
>>
>> But here is what happens.
>>
>> Given a ruby script test.rb (with its executable bit set):
>>
>> #!/usr/bin/env ruby
>> STDOUT.puts "stdout"
>> STDERR.puts "stderr"
>>
>> And the following R code:
>>
>>
>>
>>> t <- tempfile()
>>> res <- system2("./test.rb", stdout=TRUE, stderr=t)
>>>
>>>
>> stderr
>>
>>
>>> res
>>>
>>>
>> [1] "stdout"
>>
>>
>>> file.exists(t)
>>>
>>>
>> [1] FALSE
>>
>> I would expect the file t to exist and contain "stderr", and I would
>> expect
>> not to see "stderr" in the console.
>>
>> Also, there is a typo in the man page - the command is listed as "system"
>> in
>> the Description instead of "system2".
>>
>> The reverse behavior does work correctly:
>>
>>
>>> res <- system2("./test.rb", stdout=t, stderr="")
>>>
>>>
>> stderr
>>
>>
>>> file.exists(t)
>>>
>>>
>> [1] TRUE
>>
>>
>> Thanks!
>> Dan
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
> ______________________________________________________________________
> The information in this email is confidential and inte...{{dropped:11}}



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu 11 Nov 2010 - 05:14:17 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 12 Nov 2010 - 10:20:20 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive