2011-08-02 13 views
7

¿Cómo verifico si un descriptor de archivo dado es válido? Deseo escribir al fd=3 si está disponible; de lo contrario, quiero escribir en stdout. Soy consciente de que podría ajustar cada llamada a os.write con la declaración try-except, pero me gustaría saber con anticipación si fd=3 es escribible o no.Comprobar si el descriptor de archivo es válido

Respuesta

6

Usted podría utilizar os.fstat para determinar si el descriptor de archivo es válido antes de cada escritura, pero se necesita para envolverlo en un try/excepto de todos modos porque los descriptores de archivos no válidos elevarán un OSError. Probablemente sea mejor que solo cree su propia función de escritura con try/except.

def write(data, fd=3): 
    try: 
     os.write(fd, data) 
    except OSError: 
     sys.stdout.write(data) 
+0

Gracias, usaré' os.fstat'. – cpburnz

2

¿Qué hay de tratar de os.write a fd=3 una vez al inicio (dentro de un try - bloque except), y cambiar todo el comportamiento posterior basado en el éxito de esa?

De esta manera no tendrá que envolver todas las llamadas en try - except. Por supuesto, esto se romperá si fd=3 deja de ser válido en el medio de su problema (por ejemplo, si se trata de una tubería que se cierra desde el otro extremo).

+1

que iba a tratar de llamar 'os.fstat' y comprobar los bits de modo en lugar de' os.write', para evitar el efecto secundario no deseado de escribir a la fd, pero por lo demás sí, try/except es el perfecto modismo para este problema. "Mejor pedir perdón, etc." –

+0

@Chris Farmiloe: ¿''Os.fstat' detectaría una tubería rota? – NPE

+0

Sí generará una "Operación en archivo cerrado" 'ValueError' creo –

Cuestiones relacionadas