Thanks for the windows fix.

There seems to be a new problem on unix.

I added a line in system2() to print out what "command" is before
.Internal(system(command, intern))
is called:


dhcp151078:R-latest dtenenba$ svn diff
src/library/base/R/unix/system.unix.R
Index: src/library/base/R/unix/system.unix.R
===================================================================
--- src/library/base/R/unix/system.unix.R (revision 53575)
+++ src/library/base/R/unix/system.unix.R (working copy)
@@ -99,6 +99,7 @@
         command <- paste(command, "<", f)
     } else if (nzchar(stdin)) command <- paste(command, "<", stdin)
     if(!wait && !intern) command <- paste(command, "&")
+    print(paste("DT>command=",command))
     .Internal(system(command, intern))
 }


Then, in an interactive session:

> system2("ls", stdout=tempfile())
[1] "DT>command= 'ls' >
'/var/folders/+S/+S6T7ZtyHTWWMoKWNsr35E+++TM/-Tmp-//RtmpWblaIC/file49506514'
2> ''"
sh: : No such file or directory

Looks like it's trying to redirect stderr somewhere but no filename is
provided.
If no stderr argument is supplied, I'd expect the stderr to appear in the R
console, not be redirected to a file.

Thanks!
Dan



On Thu, Nov 11, 2010 at 8:44 PM, Dan Tenenbaum <dtenenba@fhcrc.org> wrote:

> I notice that a fix for this issue was checked in. Thanks, much
> appreciated!
>
> But it still seems broken on Windows. Given the same ruby script, and this
> R code:
>
> > cmd <- "c:/ruby192/bin/ruby"
> > args <- c("test.rb")
> > t <- tempfile()
> > system2(cmd, args, stdout=TRUE, stderr=t)
> [1] "stderr" "stdout"
> > file.exists(t)
> [1] FALSE
>
> I would expect only "stdout" to show up in the console, and t to contain
> "stderr".
>
> > sessionInfo()
> R version 2.13.0 Under development (unstable) (2010-11-04 r53530)
> Platform: x86_64-pc-mingw32/x64 (64-bit)
>
> locale:
> [1] LC_COLLATE=English_United States.1252
> [2] LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=English_United States.1252
> [4] LC_NUMERIC=C
> [5] LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> loaded via a namespace (and not attached):
> [1] tools_2.13.0
>
> Thanks
> Dan
>
>
> On Wed, Nov 10, 2010 at 9:11 PM, Dan Tenenbaum <dtenenba@fhcrc.org> wrote:
>
>> 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@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@r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>
>>>>
>>>
>>> ______________________________________________________________________
>>> The information in this email is confidential and intended solely for the
>>> addressee.
>>> You must not disclose, forward, print or use it without the permission of
>>> the sender.
>>> ______________________________________________________________________
>>>
>>>
>>
>

	[[alternative HTML version deleted]]

