Foros del Web » Programación web » Python »

shell desde phyton

Estas en el tema de shell desde phyton en el foro de Python en Foros del Web. Buen día foro hace unas semanas puse en el foro de postgresql esta pregunta . Sin hablar de plpython y solo hablando de python... como ...
  #1 (permalink)  
Antiguo 05/06/2011, 15:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.728
Antigüedad: 5 años, 2 meses
Puntos: 326
shell desde phyton

Buen día foro

hace unas semanas puse en el foro de postgresql esta pregunta.

Sin hablar de plpython y solo hablando de python... como se pueden ejecutar comandos de la shell de linux desde python? En este caso sería el comando pg_dump pero aplicaría para cualquier cosa. Crear/Eliminar Directorios o arhivos, cambiar epermisos etc etc.

espero me puedan ayudar.

saludos a todos
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #2 (permalink)  
Antiguo 05/06/2011, 16:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 6.563
Antigüedad: 9 años, 1 mes
Puntos: 1168
Respuesta: shell desde phyton

Si quieres hacer llamadas al sistema tienes varias opciones:
1.- Usar el modulo os y la función system, ejemplo:
Código Python:
Ver original
  1. import os
  2. os.system("ls")

2.- Usar el modulo subprocess
Código Python:
Ver original
  1. from subprocess import Popen, PIPE
  2.  
  3. p = Popen("dir", shell=True,
  4.           stdin=PIPE, stdout=PIPE, stderr=PIPE)
  5. (child_stdin,
  6.  child_stdout,
  7.  child_stderr) = (p.stdin, p.stdout, p.stderr)
  8. print child_stdout.read() #No hagas esto en produccion xD
  9. print child_stderr.read() #Ni esto tampoco

Todo depende de lo quieras hacer, quieres simplemente hacer una llamada a sistema, sin importar el stdin o stdout del programa entonces usa la primera opción.

Si quieres hacer mas cosas con la entrada y salida del programa entonces usa la segunda opción.
  #3 (permalink)  
Antiguo 06/06/2011, 07:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.728
Antigüedad: 5 años, 2 meses
Puntos: 326
Respuesta: shell desde phyton

Gracias razpetia.... mañana a primera hora hago unas pruebas y te cuento.

saludos
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #4 (permalink)  
Antiguo 06/06/2011, 08:14
Avatar de AlvaroG
/bin/env python
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 7.584
Antigüedad: 8 años, 9 meses
Puntos: 575
Respuesta: shell desde phyton

Sip, os.system es la opción más simple si solamente se trata de ejecutar el comando.
Se supone que es preferible usar subprocess.Popen, pero ninguna de las alternativas es tan simple y directa como os.system, y cuando se trata de automatizar tareas en la línea de comandos, lo preferible es lo simple y directo.


Saludos.
__________________
blog ElCodiguero
  #5 (permalink)  
Antiguo 07/06/2011, 08:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.728
Antigüedad: 5 años, 2 meses
Puntos: 326
Respuesta: shell desde phyton

Que tal compañeros.

os.system ha sido un éxito desde plpython.



Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION copiar_archivos()
  2.   RETURNS text AS
  3. $BODY$
  4.  import os
  5.  os.system("cp /var/lib/pgsql/data/hola.txt /var/lib/pgsql/data/hola2.txt");
  6. $BODY$
  7.   LANGUAGE plpythonu VOLATILE
  8.   COST 100;
Ejecuto esta función, reviso la ruta y efectivamente me hace bien la copia.

Sin embargo, tengo un archivo de extensión sh. Si por linea de comandos ejecuto ./archivo.sh me funciona bien (En este archivo está el backup), pero cuando lo tiro desde plpython con os.system("./archivo.sh") no me hace nada.
Para la ejecución de archivos es necesario hacer otra cosa?

Muchas gracias.
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #6 (permalink)  
Antiguo 07/06/2011, 10:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.728
Antigüedad: 5 años, 2 meses
Puntos: 326
Respuesta: shell desde phyton

Compadres.... solucionado.
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION copiar_archivos()
  2.   RETURNS text AS
  3. $BODY$
  4.  import os
  5.  os.system("sh archivo.sh");
  6. $BODY$
  7.   LANGUAGE plpythonu VOLATILE
  8.   COST 100;

Solo había que anteponer sh en la ejecución del archivo.

Muchas gracias a ambos. Han solucionado mi problema.
__________________
El que no sabe lo que busca, no entiende lo que encuentra.
  #7 (permalink)  
Antiguo 07/06/2011, 14:26
Avatar de AlvaroG
/bin/env python
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 7.584
Antigüedad: 8 años, 9 meses
Puntos: 575
Respuesta: shell desde phyton

Hmm es extraño: si el archivo tiene permisos de ejecución y define correctamente su hashbang (primera línea #!/bin/sh), debería ejecutarse igualmente.
__________________
blog ElCodiguero
  #8 (permalink)  
Antiguo 07/06/2011, 16:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.728
Antigüedad: 5 años, 2 meses
Puntos: 326
Respuesta: shell desde phyton

No tenía el hashbang.

Ya lo probé y funciona bien.

Mil gracias alvaro
__________________
El que no sabe lo que busca, no entiende lo que encuentra.

Etiquetas: shell
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:00.
SEO by vBSEO 3.3.2