2011-07-14 46 views
9

Tengo un script R que hace un par de gráficas. Me gustaría poder ejecutar este script desde Python.ejecutando un script R desde python

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é lo que 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 podría haber tenido algo que ver con cwd = none pero lo cambié y todavía tenía un error.

Siguiente He intentado lo siguiente:

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

Pero esto también me dio un error:

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

Más recientemente he intentado:

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

Esto abrió una nueva Konsole ventana pero no se ejecutó ninguna secuencia de comandos R Además, recibí el siguiente error:

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

Thanks.

+0

¿funciona este script cuando se ejecuta desde la línea de comandos sin python? – wespiserA

+0

http://stackoverflow.com/questions/37350886/simple-way-to-pass-directory-to-r-script-using-python/37351221#37351221 – BMW

Respuesta

0

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

10

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

He leído en Internet que hay una utilidad llamada RScript que se utiliza para ejecutar el script R desde la línea de comandos. Así que con el fin de ejecutar el script que usaría pitón de esta manera:

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

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

Si desea capturar stdout y stderr, lo haces de esta manera:

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

+0

Esto funcionó para mí. En el siguiente [enlace] (http://stackoverflow.com/questions/11679936/python-subprocess-arguments), vea una forma inteligente de tomar una línea de comando normal y usar split() en la cadena para crear la matriz exacta Popen está esperando. – jatal

0

algo le gusta este trabajo por lo general para mí:

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

error Shell 126 es una ejecución error.

El permiso denegado implica que tiene un "problema de permiso" específicamente.

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

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

Si el código se ejecuta, le dan el permiso correcto pero menos accesibles.

Si esto no funciona, intente cambiar R a Rscript.

Cuestiones relacionadas