2012-07-18 154 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中的等效概念),因此重定向不起作用。