ejecutando un script R desde python

Tengo un script en R que hace un par de ttwigs. Me gustaría poder ejecutar este script desde python.

Lo intenté por primera vez:

import subprocess subprocess.call("/.../plottingfile.R", shell=True) 

Esto me da el siguiente error:

 /bin/sh: /.../plottingfile.R: Permission denied 126 

No sé qué significa el número 126. ¿Todos mis archivos están en el escritorio y, por lo tanto, no creo que se necesiten permisos especiales? Pensé que este error puede haber tenido algo que ver con cwd = none, pero cambié esto y todavía tuve un error.

A continuación probé lo siguiente:

 subprocess.Popen(["R --vanilla --args "], shell = True) 

Pero esto también me dio un error con:

 /bin/sh: Syntax error: end of file unexpected. 

Más recientemente probé:

 subprocess.Popen("konsole | /.../plottingfile.R", shell = True) 

Esto abrió una nueva ventana de consola, pero no se ejecutó ningún script R. Además, recibí el siguiente error:

 /bin/sh: /.../plottingfile.R: Permission denied 

Gracias.

Lo primero es lo primero, asegúrese de tener el script platttingfile.R en un lugar al que pueda acceder. Normalmente es el mismo directorio.

Leí en Internet que hay una utilidad llamada RScript que se usa para ejecutar el script R desde la línea de comandos. Entonces, para ejecutar el script, usarías python así:

 import subprocess retcode = subprocess.call(['/path/to/RScript','/path/to/plottingfile.R']) 

Esto devolvería el retcode retorno 0 al completar con éxito. Si su plottingfile.R está devolviendo algún tipo de salida, se lanzará en STDOUT. Si se está levantando un GUI, entonces aparecerá.

Si quieres capturar stdout y stderr, hazlo así:

 import subprocess proc = subprocess.Popen(['/path/to/RScript','/path/to/plottingfile.R'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = proc.communicate() 

Error de shell 126 es un error de ejecución.

El permiso denegado implica que usted tiene un “problema de permiso” específicamente.

Vaya al archivo y asegúrese de que R / Python pueda acceder a él. Yo probaría esto primero

 $sudo chmod 777 /.../plottingfile.R 

Si el código se ejecuta, dale el permiso correcto pero menos accesible.

Si esto no funciona, intente cambiar R a Rscript.

¿Has probado chmod u+x /pathTo/Rscript.R ?

A algo le gusta este trabajo usualmente para mi:

 subprocess.Popen("R --vanilla /PATH/plottingfile.R", shell = True)