2012-07-18 123 views
1

考虑以下两种情况:a)关闭输出重定向和b)Rscript输出重定向到文件out.txt两种情况下的输出都在STDOUT中看到,未能重定向到文件输出.txt仅适用于场景b。我在这里错过了什么,或者这是Rscript.exe特有的吗?MS DOS命令行输出重定向到文件不会产生输出

C:\>C:\\WINDOWS\\system32\\shutdown.exe -t:30 > out.txt 

C:\>dir out.txt 
Volume in drive C has no label. 
Volume Serial Number is 3568-1B07 

Directory of C:\ 

07/18/2012 07:43 PM    841 out.txt 
       1 File(s)   841 bytes 
       0 Dir(s) 17,618,206,720 bytes free 

C:\>G:\\Progra~1\\R\\R-2.14.0\\bin\\Rscript.exe --version > out.txt 
R scripting front-end version 2.14.0 (2011-10-31) 

C:\>dir out.txt 
Volume in drive C has no label. 
Volume Serial Number is 3568-1B07 

Directory of C:\ 

07/18/2012 07:44 PM     0 out.txt 
       1 File(s)    0 bytes 
       0 Dir(s) 17,618,239,488 bytes free 

有关为什么Rscript.exe输出没有被重定向到文件out.txt的任何想法或解释?也许一个非常简单的解释等待。

感谢你,

+0

不知道的重定向,但你可以使用'汇()'在R指令来完成你在找什么。 – 2012-07-18 14:24:34

+0

我猜数据正在写入STDERR而不是STDOUT。尝试将'2>&1'追加到命令中以将STDERR重定向到STDOUT,STDOUT然后将结束在outfile中。 – DaveRandom 2012-07-18 14:30:39

+0

@JeffAllen谢谢杰夫。其实我正在通过嵌入上述命令的php脚本来检查R版本。 – useR 2012-07-18 14:30:44

回答

1

答案很简单。版本信息写入STDERR(标准错误流),但您只是重定向STDOUT(标准输出)。如果要同时去的文件,然后使用

G:\\Progra~1\\R\\R-2.14.0\\bin\\Rscript.exe --version >out.txt 2>&1 
+0

谢谢@Aleks。 STDOUT似乎是STDOUT 的文件句柄,即c:\ Rscript.exe --version“> STDOUT> 2&1 我猜上述工作没有涉及额外的文件,节省了磁盘I/O的开销。 – useR 2012-07-18 15:27:46

1

不能使用重定向来获得的版本信息,但对于实际的R命令你可以使用重定向。例如,如果你有一个文件a.r在它只是一个命令,像1+1则:

Rscript a.r > out.txt 

会显示结果。我认为它与R发送版本信息的“输出”有关。我认为它输出到STDERR而不是STDOUT(或DOS中的等效概念),因此重定向不起作用。