Подтвердить что ты не робот

Системные функции R всегда возвращают ошибку 127

Мне нужно запустить внешний инструмент из R и обработать ошибки (если они есть) в этом инструменте. Я знаю 3 функции, чтобы сделать что-то знакомое с моей задачей:

shell, system and system2.

Пытаясь проверить это, я вижу эту команду

shell("notepad") 

открывает блокнот. Насколько я знаю, оболочка не позволяет проверять ошибки (нет интерфейса для просмотра stderr).

Когда я звоню

system("notepad")

или

system2("notepad") 

R зависает при попытке выполнить эти команды.

Вызов

system("start notepad") 

или

system2("start notepad") 

возвращает предупреждение

Warning message:
running command '"start notepad"' had status 127 
4b9b3361

Ответ 1

Как я уже упоминал в своих комментариях, в документации R показано, что в Windows функция system() не запускает отдельную оболочку (если необходимо). Вот почему команды командной строки работают с system(), но Notepad, который требует отдельного окна, не запускается:

Из документация для system():

Самое важное отличие состоит в том, что в Unix-подобной системе запускается оболочка, которая затем запускает команду. В Windows команда запускается напрямую - использует оболочку для интерфейса, который запускает команду через оболочку (по умолчанию оболочка Windows cmd.exe, которая имеет много отличий от оболочки POSIX).

Ответ 2

Адаптация ответа @DavidTseng (извините за отсутствие достаточной репутации для его продвижения)...

system("cmd.exe", input = "notepad")

работал у меня в Windows.

Ответ 3

system("bash -l", input = "notepad")

Ответ 4

для пользователей windows неправильно: system(path("c:", "program files", "r", "anysoft.EXE")) но работает: system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))

Ответ 5

Я не уверен, было ли обновление для R, которое позволяет это, так как вопрос был задан почти четыре года назад, но system("\"C:\path\to\exe.exe\" args", intern = T) работает для меня и БУДЕТ открыть отдельное дочернее окно и работает на Windows 10 + R 3.6 + RStudio,

Не использование 'intern = T' давало мне код возврата 127 и не запускало процесс.

Ответ 6

Вы, ребята, делаете это так сложно. Я решил эту проблему, сославшись на этот ответ. Проблема с ПУТИ. наберите Sys.which('') в R, и вы ничего не увидите. Таким образом, вы должны установить путь в CMD, а затем использовать Sys.setenv(PATH = '') в R, чтобы получить эту работу.