ответ «да» на запрос терминала через system2 () в R - PullRequest
1 голос
/ 30 марта 2020

tl; dr : Как я могу вызвать системную команду y | conda create --name gee_interface из консоли R, например, через system2 ()? Мне достаточно комфортно с system2('conda', c('create', '--name', 'gee_interface')), но я не знаю, как обращаться с трубами в 'y' через system2().

Подробности Я пытаюсь использовать R консоль для запуска команды bash conda create --name gee_interface (OSX Mojave с установленной Anaconda).

В терминале эта команда выполняется просто отлично, но побуждает меня ответить с помощью Proceed ([y]/n)? (я отвечаю 'y' и все работает гладко).

В R я запускаю

Sys.setenv(PATH = paste(c("/Applications/anaconda3/bin", Sys.getenv("PATH")), collapse = .Platform$path.sep)) # ensures that system2() finds conda

system2('conda', c('create', '--name', 'gee_interface')) # This is the key line for the purposes of this question

При запуске второй строки [т.е. system2('conda', c('create', '--name', 'gee_interface'))] процесс никогда не завершается, но быстро падает до нуля использования ЦП. Предположительно система ждет моего ответа на приглашение, но я не знаю, как его предоставить. Как это сделать с помощью сценария R? Также обратите внимание, что в моем конкретном случае число раз, которое мне нужно, чтобы ответить 'y', является переменным, в зависимости от того, существует ли уже окружение с именем gee_interface.

1 Ответ

2 голосов
/ 30 марта 2020

Решение вашей первой проблемы - сказать conda не запрашивать подтверждение с помощью -y:

system2('conda', c('create', '--name', 'gee_interface', '-y'))

Что касается второй части (переменное время, необходимое для ввода), я я предполагаю, что это перезаписать среду, если она существует? В этом случае вы можете проверить его существование сначала с помощью conda info --envs и, если необходимо, запустить conda remove --name gee_interface --all перед его созданием.

См .:

https://docs.conda.io/projects/conda/en/latest/commands/create.html

https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#removing -an-environment


Вы также можете попробовать свой system2 вызов с аргументом input = "y", но это не так Исправьте вторую проблему необходимости многократного подтверждения.

См .: Вызов системной команды и передача переменной в качестве аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...