web-dev-qa-db-fra.com

Les fonctions système R retournent toujours l'erreur 127

Je dois exécuter un outil externe à partir deRet des erreurs de traitement (le cas échéant) se sont produites dans cet outil . Je connais trois fonctions pour effectuer des tâches familières avec ma tâche: 

Shell, system and system2.

Souhaitant tester ceux-ci, je vois cette commande 

Shell("notepad") 

ouvre le bloc-notes. Autant que je sache, Shell ne permet pas de vérifier les erreurs (il n'y a pas d'interface pour examiner stderr).

Quand j'appelle 

system("notepad")

ou 

system2("notepad") 

Rfige en essayant de faire ces commandes. 

Appel 

system("start notepad") 

ou 

system2("start notepad") 

retourne l'avertissement 

Warning message:
running command '"start notepad"' had status 127 
12
Powerfool

Comme je l'ai mentionné dans mes commentaires, la documentation R révèle que sous Windows, la fonction system() ne lance pas de shell séparé (si nécessaire). C'est pourquoi les commandes en ligne de commande sont exécutées avec system(), mais Notepad, qui nécessite une fenêtre distincte, ne s'exécute pas:

Dans la documentation pour system():

La différence la plus importante est que sur un système semblable à Unix, un shell lance une commande. Sous Windows, la commande est exécutée directement - use Shell pour une interface qui exécute une commande via un shell (par défaut, le shell Windows cmd.exe, qui présente de nombreuses différences par rapport à un shell POSIX).

4
Tim Biegeleisen

Adaptation de la réponse de @ DavidTseng (désolée de ne pas avoir assez de réputation pour la relancer) ...

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

travaillé pour moi sous Windows.

14
Jonas Luz Jr.
system("bash -l", input = "notepad")
3
KST

pour les utilisateurs de Windows faux: system(path("c:", "program files", "r", "anysoft.EXE")) mais fonctionne: system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))

Vous faites ça si compliqué. J'ai résolu ce problème en faisant référence à cette réponse . Le problème est avec le PATH. tapez Sys.which('') dans R et vous ne verrez rien. Vous devez donc définir le chemin dans CMD, puis utiliser Sys.setenv(PATH = '') dans R pour obtenir ce travail. 

0
Bowen Chen