Skip to content

[R-es] Ejecutar un script de Python con argumentos desde R

5 messages · Juan Abasolo, Marcelino de la Cruz Rot

#
Hola, amigos
Se me acabo la sapienza. A ver:
tengo un sript de Python script.py que neesita sus argumentos arg1 arg2
arg3, si desde la consola del sistema me pongo en la carpeta en la que lo
tengo y hago:
$ script.py arg1 arg arg3
Funciona perfecto.

Pero desde R no lo consigo (entiendo que por no saber)

Lo hago así (copio y pego):

dir <- getwd()
setwd('data/row/directoriocondatos/')

py_run_string(
        paste0('script.py ',
            paste0(ar[i], '1 '),
            ar[i],
            paste0(' ', ar[i], '3')
            ))
setwd(dir)

El resultado del paste0() ese lo pego en la consola del sistema y
perfecto... pero olvidate del for. Yo quiero que el script quede integrado
para hacer todo de un solo paso, pero no sé.
paste0(ar[i], '1 '),
            ar[i],
            paste0(' ', ar[i], '3')
            )
[1] "script.py arg1 arg arg3" # Si eso lo pego en la consola, todo bien.

Eso significa que tengo que corregir algo de la orden, o cambiarla o...
manden
Alguien que me desasne?
#
¿Has probado esto?

system(
paste0(ar[i], '1 '),
             ar[i],
             paste0(' ', ar[i], '3')
             )

)




El 14/06/2019 a las 11:36, Juan Abasolo escribió:

  
    
#
Ni idea de eso; te lo agradezco. Seguramente lo voy a terminar usando
bastante.
Pregunto: ahí debería hacer todas las operaciones propias del sistema? No
me encuentra el script, y se me hace raro. Capaz que pasa al sistema desde
la carpeta en la que está el script de R, no desde el wd de R.
Ahora me toca salir y después intentar probar y que funcione.
Gracis de vuelta



Hau idatzi du Marcelino De La Cruz Rot (marcelino.delacruz en urjc.es)
erabiltzaileak (2019 eka. 14, or. (11:46)):

  
    
#
Hola Juan:

en vez de system(), quería decir shell(), es decir:

shell(
  paste0('script.py ',

              paste0(ar[i], '1 '),
              ar[i],
              paste0(' ', ar[i], '3')
              )

)

Si el script está en el working directory [getwd()], te debería 
funcionar sin problemas.

Tanto system() como shell() te permiten interactuar con el sistema 
fácilmente. Cada una tiene sus peculiaridades. Consulta ?system y ?shell





El 14/06/2019 a las 12:14, Juan Abasolo escribió:

  
    
#
Y así es como cada vez te debo más cervezas o cafés!

Mil gracias.

Me faltaba invocar *python*


*system(*







*   paste0('python script.py ',               paste0(ar[i], '1 '),
     ar[i],               paste0(' ', ar[i], '3')               ) )*

Entiendo que el comando shell() es para que funcione en windows; en Linux
con el original system() es suficiente. Veo que tengo que hacer algo
también para que el sistema espere a que se termine de ejecutar el comando,
porque necesito que lea los ficheros que genera. Pero de eso me desasno
leyendo.

Gracias



Hau idatzi du Marcelino De La Cruz Rot (marcelino.delacruz en urjc.es)
erabiltzaileak (2019 eka. 14, or. (12:52)):