2010-07-30 18 views
6

Duplicar posibles:
check what files are open in Python¿Lista todos los identificadores de archivo abiertos actualmente?

Hola,

¿Es posible obtener una lista de todos los identificadores de archivo abiertos actualmente, supongo que se almacenan en algún lugar en el medio ambiente .

Me interesa la función theis, ya que me gustaría manejar de forma segura los archivos que se abren cuando se produce un error grave, es decir, el archivo cercano maneja y reemplaza los archivos potencialmente corruptos con los archivos originales.

Tengo el manejo funcionando, pero sin saber qué manejadores de archivos están abiertos, no puedo implementar esta idea.

Como un lado, cuando se inicializa un identificador de archivo, ¿puede ser heredado por otro método importado?

Gracias

+3

Duplicado de http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python – robert

+0

cual o/s? Y también podría ser útil agregar eso como una etiqueta. – Mawg

Respuesta

3

El agradable forma de hacer esto sería la de modificar el código para no perder de vista cuando se abre un archivo:

def log_open(*args, **kwargs): 
    print("Opening a file...") 
    print(*args, **kwargs) 
    return open(*args, **kwargs) 

Luego, use log_open en lugar de open para abrir archivos. Incluso podría hacer algo más hacky, como modificar la clase File para que se registre. Eso está cubierto en la pregunta vinculada arriba.

Probablemente hay una desagradable, sucio truco que implica el recolector de basura o en busca de __dict__ o algo, pero que no quieren hacer eso a menos que absolutamente real y verdaderamente serio necesidad.

0

Si está utilizando Python 2.5 + se puede utilizar la palabra clave with (aunque 2.5 `necesidades de futuro with_statement importación)

with open('filename.txt', 'r') as f: 
    #do stuff here 
    pass 
#here f has been closed and disposed properly - even with raised exceptions 

No sé qué tipo de fallo catastrófico necesita Bork la declaración with, pero supongo que es realmente mala. En WinXP, mi prueba rápida no científica:

import time 
with open('test.txt', 'w') as f: 
    f.write('testing\n') 
    while True: 
     time.sleep(1) 

y luego matar el proceso con el Administrador de tareas de Windows todavía escribió los datos en un archivo.

Cuestiones relacionadas