Errores y ocultamiento con OS

Jaime Soriano Pastor kronoss en kronoss.org
Sab Jun 21 23:10:28 CEST 2008


Buenas,

2008/6/21 kalith kalith <kalith.9 en gmail.com>:
> 1.- Es posible ocultar lo que se hace en la consola cuando se invoca al
> modulo os especificamente en system, digamoslo de esta manera si hago
> os.system('apt-get install amsn') que no se vea cuando se este instalando.
>
Con system no conozco manera de ocultar el output, hay que usar alguno
de los popen. En todo caso puedes poner la redirección a /dev/null en
el mismo comando, algo así como:
os.system("apt-get install amsn > /dev/null 2> /dev/null")

Dependiendo de las salidas que quieras ocultar.

> 2.- Si ocurriese un error DURANTE la instalación de algo usando el modulo
> system, pero que no tenga nada que ver con python; en pocas palabras que sea
> del sistema operativo, puedo lanzar un mensaje de error asi como cuando uso
> try except, estube buscando en la documentación y encontre algo sobre
> os.error pero la verdad no se como usarlo
>
Con lo anterior podrías hacerlo lanzando excepción si el system
retorna un valor distinto de cero, pero no podrías obtener la causa
del error, para eso sí que has de usar popen, quizá te sirva algo así:

import os
import popen2

class MySystemException(Exception): None

def mysystem(command):
    process = popen2.Popen3(command, True)
    status = process.wait()
    if status != 0:
        raise MySystemException("%d: %s" % (status, process.childerr.read()))

>>> mysystem("ls")
>>> mysystem("apt-get update")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mycommand.py", line 10, in mysystem
    raise MySystemException("%d: %s" % (status,
process.childerr.read()))
mycommand.MySystemException: 25600: E: No se pudo abrir el fichero de
bloqueo '/var/lib/apt/lists/lock' - open (13 Permiso denegado)
E: No se pudo bloquear el directorio de listas


Un saludo,

Jaime.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es