Je dois exécuter un outil externe à partir deR
et 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")
R
fige 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
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).
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.
system("bash -l", input = "notepad")
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.