Перенаправление вывода командной строки MS DOS в файл не приводит к выводу

Рассмотрим два сценария: а) перенаправление вывода при завершении работы и б) перенаправление вывода Rscript в файл out.txt. Вывод, видимый в STDOUT в обоих сценариях, не может быть перенаправлен в файл out.txt только в сценарии b. Я что-то упустил или это особенность Rscript.exe?

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?? Возможно, вас ждет очень простое объяснение.

Благодарю вас,


person useR    schedule 18.07.2012    source источник
comment
Не уверен насчет перенаправления, но вы можете использовать команду sink() в R, чтобы выполнить то, что вы ищете.   -  person Jeff Allen    schedule 18.07.2012
comment
Я предполагаю, что данные записываются в STDERR, а не в STDOUT. Попробуйте добавить 2>&1 к командам, чтобы перенаправить STDERR в STDOUT, который затем попадет в выходной файл.   -  person DaveRandom    schedule 18.07.2012
comment
@JeffAllen Спасибо, Джефф. На самом деле я хочу сделать это с помощью php-скрипта, включающего приведенные выше команды, которые проверяют версию R.   -  person useR    schedule 18.07.2012
comment
@DaveRandom Спасибо, Дэйв. Вывод записывался в STDERR, и 2&1 учитывал его.   -  person useR    schedule 18.07.2012


Ответы (2)


Ответ довольно прост. Информация о версии записывается в STDERR (стандартный поток ошибок), но вы только перенаправляете STDOUT (стандартный вывод). Если вы хотите, чтобы оба отправились в файл, используйте

G:\\Progra~1\\R\\R-2.14.0\\bin\\Rscript.exe --version >out.txt 2>&1
person Aleks G    schedule 18.07.2012
comment
Спасибо @Алекс. STDOUT действительно кажется дескриптором файла для STDOUT, т.е. c:\Rscript.exe --version › STDOUT ›2&1. Я предполагаю, что вышеизложенное работает без использования дополнительного файла, экономя накладные расходы на дисковый ввод-вывод. - person useR; 18.07.2012

Вы не можете использовать перенаправление для получения информации о версии, но вы можете использовать перенаправление для реальных команд R. Например, если у вас есть файл a.r, содержащий только одну команду, например 1+1, тогда:

Rscript a.r > out.txt

отобразит результаты. Я думаю, что это как-то связано с «выводом», на который R отправляет информацию о версии. Я думаю, что он выводится в STDERR, а не в STDOUT (или эквивалентную концепцию в DOS), поэтому перенаправление не работает.

person nograpes    schedule 18.07.2012