create - python make a temporary file
¿Cómo puedo crear un ramdisk en Python? (4)
Quiero crear un ramdisk en Python. Quiero poder hacer esto de forma multiplataforma, por lo que funcionará en Windows XP-to-7, Mac y Linux. Quiero poder leer / escribir en el ramdisk como si fuera una unidad normal, preferiblemente con una letra / ruta de unidad.
El motivo por el que quiero esto es escribir pruebas para un script que crea un directorio con cierta estructura. Quiero crear el directorio completamente en el disco RAM, así me aseguraré de que se borre por completo una vez que terminen las pruebas. Consideré usar el tempfile
de tempfile
de Python, pero si la prueba se detiene en el medio, es posible que el directorio no se elimine. Quiero estar completamente seguro de que se borrará incluso si alguien desconecta la computadora en el medio de una prueba.
¿Qué hay de PyFilesystem ?
http://docs.pyfilesystem.org/en/latest/memoryfs.html#module-fs.memoryfs
http://docs.pyfilesystem.org/en/latest/tempfs.html#module-fs.tempfs
La desventaja es que tienes que acceder al sistema de archivos con la API de PyFilesystem, pero también puedes acceder a los archivos fs reales con PyFilesystem.
Debido a que el manejo de archivos y directorios es de tan bajo nivel y depende del sistema operativo, dudo que exista (o que sea posible) algo como lo que usted quiere. Su mejor opción podría ser implementar un conjunto de funciones, clases y métodos "virtuales" similares a los del sistema de archivos, que haga un seguimiento de los archivos y la jerarquía de directorios creados y su contenido.
Callables en una emulación de este tipo debería tener la misma firma y devolver el mismo valor (es) que sus contrapartes en los diversos módulos integrados y módulos de Python que utiliza su aplicación.
Sospecho que esto podría no ser tanto trabajo como suena, emulando la interfaz de sistema de archivos estándar de Python, dependiendo de la cantidad que estés usando, ya que no necesariamente tendrías que imitarlo todo. Además, si está escrito en Pure Python ™, también sería portátil y fácil de mantener y mejorar.
Por favor lee esto:
http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile
"Devuelve un objeto similar a un archivo que se puede usar como área de almacenamiento temporal. El archivo se crea usando mkstemp (). Se destruirá tan pronto como se cierre (incluido un cierre implícito cuando el objeto es basura)."
Todo se maneja para ti. No hacer nada y ya funciona.
Una opción podría ser la de inyectar (parche de mono) versiones modificadas de los métodos utilizados en el módulo os
, así como también las compilaciones open
y los file
que escriben en archivos StringIO
lugar de en el disco. Obviamente, esta sustitución solo debería ocurrir para el módulo que se está probando;