Ejecutando Rscript a través de Python usando os.system () o subprocess ()

Estoy enfrentando problemas al ejecutar un Rscript a través de Python usando os.system () o subprocess ().

El uso de os.system () para ejecutar comandos a través de python generalmente funciona bien para mí (por ejemplo, con gdalwarp.exe) pero no con Rscript.exe.

La única diferencia que puedo ver son los espacios en el camino.

Evitar problemas con espacios en la ruta es fácil de superar en la ventana de CMD poniendo las rutas entre comillas. La ejecución del siguiente comando es exitosa.

"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R" 

Pero estoy atrapado con Python. Lo que intenté hasta ahora con python:

 os.system("C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R") os.system(r"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R") os.system(r'"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R"') subprocess.call([r'C:/Program Files/R/R-3.0.2/bin/Rscript.exe', r'D:/.../otsu_Script.R']) 

¿Alguien ve lo que estoy haciendo mal? Gracias de antemano, Eike

Después de volverse mental en un problema tan simple. Decidí volver a instalar RStatistics en una ruta sin espacios ni puntos, como: C:/R/bin/Rscript.exe .

Ahora subprocess.call(["C:/R/bin/Rscript.exe", "D:/otsu_Script.R"] ) o os.system("C:/R/bin/Rscript.exe D:/otsu_Script.R") están funcionando bien. Debería haberlo probado hace dos días …

… pero ahora soy un mono feliz de todos modos 🙂

Probablemente ya sea demasiado tarde y he visto que resolviste el problema, pero estaba teniendo un problema similar (aunque en un sistema Linux) y podría ayudar a alguien más ahora; este comando no funcionaba cuando se llamaba dentro de python, aunque funcionaba directamente en el terminal / línea de comandos.

 os.system("R CMD BATCH ./read_lengths_batch.R") 

Probé muchas soluciones, incluyendo subprocess y otras, pero me pareció más fácil que eso. En mi caso, y entiendo que podría ser diferente en Windows, tuve que agregar un & al final de la llamada para que se ejecute en segundo plano. De alguna manera, parecía que R se apagaría con el script Python en lugar de hacer su trabajo.

 os.system("R CMD BATCH ./read_lengths_batch.R &") 

Curiosamente, también estaba funcionando si en mi carpeta me gustaría copiar el mismo archivo con una extensión .txt : read_lengths_batch.R y read_lengths_batch.txt .

Espero que ayude a alguien!