Foros del Web » Programando para Internet » 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.980
Antigüedad: 15 años, 9 meses
Puntos: 360
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
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #2 (permalink)  
Antiguo 05/06/2011, 16:08
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
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.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: shell desde phyton

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

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 06/06/2011, 08:14
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
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.
  #5 (permalink)  
Antiguo 07/06/2011, 08:47
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
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.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 07/06/2011, 10:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
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.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 07/06/2011, 14:26
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
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.
  #8 (permalink)  
Antiguo 07/06/2011, 16:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: shell desde phyton

No tenía el hashbang.

Ya lo probé y funciona bien.

Mil gracias alvaro
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

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:35.