Je souhaite utiliser la fonction
Code : Tout sélectionner
readline()
J'ai trouvé cette fonction qui apparement fonctionne sur linux (je ne l'ai pas testé):
Code : Tout sélectionner
timeout<-function(expr, seconds = 60){
killer.pid <- system(intern = TRUE, paste(" (sleep", seconds,
" ; kill -INT", Sys.getpid(),
")>/dev/null&\n echo $!"))
on.exit(system(paste("kill", killer.pid, "> /dev/null 2>&1")))
withCallingHandlers(expr, interrupt=function(...)stop("Timed
out", call.=FALSE))
}
J'ai donc voulu l'adapté pour windows. Je l'ai donc réecrit comme suit :
Code : Tout sélectionner
timeout<-function(expr, seconds = 60){
killer.pid <- system(intern = TRUE, paste("timeout /T", seconds," && taskkill /F /PID ", Sys.getpid()))
withCallingHandlers(expr, interrupt=function(...)stop("Timedout", call.=FALSE))
}
Le premier problème que je rencontre est que apparement avec la fonction
Code : Tout sélectionner
system()
J'ai donc splitté cette partie en 2, ce qui me donne la fonction (réecrite un peu differement) suivante :
Code : Tout sélectionner
timeout<-function(expr, seconds = 60){
killer.pid1 <- system(intern = TRUE, paste("PING -n",seconds, "127.0.0.1"))
killer.pid2 <- system(intern = TRUE, paste("TASKKILL /F /PID ", Sys.getpid()))
withCallingHandlers(expr, interrupt=function(...)stop("Timedout", call.=FALSE))
}
Maintenant ça marche presque, c'est a dire que si je fait par exemple
Code : Tout sélectionner
timeout(readline("Hello world!"),seconds=5)
La fonction fait bien une pause de 5 secondes et stop R complètement avant d'evaluer l'expression (readline() par exemple). Il s'agit pourtant de la version linux pour windows. Je ne comprend pas trop !
Quelqu'un aurait t'il une idée de ce qu'il se passe.
Aussi, c'est la premiere fois que j'utilise la fonction
Code : Tout sélectionner
withCallingHandlers()
Merci par avance.
Bonne journée
Stéphane