Системные функции R всегда возвращают ошибку 127
Мне нужно выполнить внешний инструмент из R
и ошибки процесса (если таковые имеются) произошли в этом инструменте. Я знаю 3 функции, чтобы сделать что-то знакомое с моей задачей:
shell, system and system2.
Что бы проверить их, я вижу эту команду
shell("notepad")
открывает блокнот. Насколько я знаю, shell не позволяет проверять ошибки (нет интерфейса для просмотра stderr).
Когда я звоню
system("notepad")
или же
system2("notepad")
R
зависает при попытке сделать эти команды.
призвание
system("start notepad")
или же
system2("start notepad")
возвращает предупреждение
Warning message:
running command '"start notepad"' had status 127
5 ответов
Как я упоминал в моих комментариях, документация R показывает, что в Windows system()
Функция не запускает отдельную оболочку (при необходимости). Вот почему команды командной строки запускаются с system()
Но Notepad, которому нужно отдельное окно, не запускается:
Из документации для system()
:
Наиболее важным отличием является то, что в Unix-подобной системе запускается оболочка, которая затем запускает команду. В Windows команда запускается напрямую - используйте shell для интерфейса, который запускает команду через оболочку (по умолчанию оболочка Windows cmd.exe, которая имеет много отличий от оболочки POSIX).
Приспосабливая ответ @DavidTseng (извините за то, что у нас недостаточно репутации, чтобы проголосовать)...
system("cmd.exe", input = "notepad")
у меня работал в винде.
Я была такая же проблема. в процессе установки есть дополнительный шаг, которого я не делал.
обратитесь к URL-адресу
https://cran.r-project.org/bin/windows/Rtools/
Найдите "Включение Rtools в ПУТЬ"
writeLines ('PATH= "$ {RTOOLS40_HOME} \ usr \ bin; $ {PATH}"', con = "~ /.Renviron")
Я не уверен, было ли обновление R, позволяющее это сделать, поскольку вопрос был задан почти четыре года назад, но system("\"C:\path\to\exe.exe\" args", intern = T)
работает для меня и БУДЕТ открывать отдельное дочернее окно и работает в Windows 10 + R 3.6 + RStudio.
Отсутствие использования 'intern = T' давало мне код возврата 127 и не запускало процесс.
Для пользователей windows неправильно: system(path("c:", "program files", "r", "anysoft.EXE"))
но работает: system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))
Вы, ребята, делаете это так сложно. Я решил эту проблему, сославшись на этот ответ. Проблема с ПУТИ. тип Sys.which('')
в R, и вы ничего не увидите. Таким образом, вы должны установить путь в CMD, а затем использовать Sys.setenv(PATH = '')
в R, чтобы получить эту работу.