Как предотвратить интерпретацию аргументов командной строки как R, так и только моим сценарием?

Я использую docopt для R. Мой сценарий имеет параметр командной строки, где краткая форма ---- +: = 0 =: + ----. Когда я запускаю свой сценарий, кажется, что этот аргумент сначала интерпретируется R, а затем моим сценарием. Поэтому я получаю пощечину от не указания значения для графического интерфейса. Могу ли я запретить R работать с этими аргументами командной строки?

Пример скрипта:

-g

Вот что происходит, когда я запускаю его:

#!/usr/bin/Rscript

suppressPackageStartupMessages(library(docopt))

"docopt practice script

Usage: foo.R [-g <goodies>]

Options:
     -g <goodies>, --goodies=<goodies>  Goodies
" -> doc

opts <- docopt(doc)
cat(sprintf("goodies = %s\n", opts$goodies))

Если вы измените краткую форму параметра с Jennifers-MacBook-Pro-3:scripts jenny$ ./foo.R -g donuts WARNING: --gui or -g without value ignored goodies = donuts на -g, -j уходит ... но у меня есть веская причина использовать букву WARNING

7 голосов | спросил jennybryan 8 J0000006Europe/Moscow 2015, 00:24:04

2 ответа


0

Как указал @krlmlr, эта проблема связана с Rscript (в вашем хэше). Одним из обходных путей будет использование функциональности, предоставляемой превосходным littler вместо Rscript. Например, используя #!/usr/bin/Rscript в foo.R, Я понял проблему:

[[email protected] R]$ ./foo.R -g donuts
WARNING: unknown gui 'donuts', using X11

goodies = donuts

Заменив это на #!/usr/local/bin/r в новом скрипте foo2.R, я получаю чистый вывод:

[[email protected] R]$ ./foo2.R -g donuts
goodies = donuts

Похоже, что вы находитесь на компьютере с OS X, поэтому, если вы решите установить littler, просто обратите внимание предупреждение авторов:

  

В OS X вы можете собрать его с помощью configure --program-prefix = "l"   переименовать его в lr, так как эта ОС считает R и r одинаковыми

ответил nrussell 8 J0000006Europe/Moscow 2015, 01:21:07
0

Команды R и Rscript знать --args. Сравните вывод следующего:

R -e "TRUE" --args --silent
R -e "TRUE" --silent

Это работает благодаря раннему выход , если --args. Однако предупреждение --gui запускается в отдельном цикле до этого .

Это означает, что

Rscript -e "commandArgs()" --args --gui

будет работать, но даст ложное предупреждение, и

Rscript -e "commandArgs()" --gui

выдает ошибку сразу. Похоже, что только --gui и -g пострадавших.

Как быстрый и грязный хак, можно вставить что-то вроде

if(!strcmp(*avv, "--args")) {
    break;
}

в начале проверки GUI цикл . До тех пор, пока это не изменится в R, я подозреваю, что нет другого выбора, кроме как избегать переключения -g или жить с (безвредным) предупреждением.

ответил krlmlr 8 J0000006Europe/Moscow 2015, 01:13:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132