Системные функции 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")

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

system("bash -l", 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, чтобы получить эту работу.

Другие вопросы по тегам