11 votos

Bloqueo de archivos de ArcGIS 10.0 Python SearchCursor

Tengo un script que obtiene un valor de un shapefile del campo para devolver al usuario.

Parece que sólo cuando el arcpy.SearchCursor se llama ArcMap bloquea el archivo y no se eliminan después de que el script termine de ejecutarse. Para obtener el bloqueo que tengo a cerca de ArcMap. En el script que elimine el SearchCursor objeto después de su uso, así como el objeto de fila.

La manera que tengo el script de trabajo es que se trata de eliminar la carpeta del área de trabajo en posteriores ejecuciones, pero no pueden porque de la cerradura...hasta que, por supuesto yo cerca de ArcMap.

¿Hay algún consejo sobre cómo obtener este bloqueo que se vaya? Esta parece ser una nueva ocurrencia para mí. Gracias.

4voto

Andy Joiner Puntos 160

corrección---
el problema fue resuelto después de:

rows = arcpy.UpdateCursor(fc)   
delete = rows.deleteRow  
for row in rows:  
    delete(row)  
del row  
del rows

Para

rows = arcpy.UpdateCursor(fc)
for row in rows:
    rows.deleteRow(row)
del row
del rows

3voto

grenade Puntos 227

Ver este post. Parece que el mismo problema. Que he recibido alrededor de él antes eliminando explícitamente la clase de función. No estoy seguro si esto funciona en todos los casos.

import arcpy

fcPath = 'c:/temp/features.shp'
idFld = 'OBJECTID'
cur = arcpy.SearchCursor(fcPath)
for row in cur:
    id = row.getValue(idFld)
    row = None
cur = None
r = arcpy.Delete_management(fcPath)

print r.getOutput(0)

Forzar una recolección de basura puede trabajar así, pero mi corazonada es que esto tiene algo que ver con el funcionamiento interno de arcpy o ArcMap.

import gc
gc.collect()

1voto

auramo Puntos 161

Si están correctamente la eliminación de la fila y objetos cursor (por ejemplo, del row, rows) y el bloqueo continúa, es probable que debido a la ArcMap sí mismo, no arcpy, todavía se hace referencia a él.

Es el archivo de forma que se hace referencia por una capa en la tabla de contenido, o es añadido a la tabla de contenido por su herramienta de secuencia de comandos?

Si el último, usted puede intentar deshabilitar "Añadir los resultados de las operaciones de geoprocesamiento a la pantalla" en virtud de Geoprocesamiento->Opciones de Geoprocesamiento en ArcMap.

Una sugerencia adicional: Si usted está haciendo esto como un temporal/intermedio conjunto de datos, y el número de cuenta no es demasiado grande, trate de usar el in_memory espacio de trabajo en lugar de un archivo de forma de obtener todo el problema de bloqueo por completo y obtener un buen potencial de aumento de rendimiento así.

Sólo asegúrese de eliminar el in_memory o área de trabajo de los conjuntos de datos específicos de crear ahí el uso de Borrar (Gestión de Datos) antes de salir de la secuencia de comandos, de lo contrario continuará residiendo en la memoria hasta que se cierra la aplicación.

Por último también quiero señalar que shapefile comportamiento de bloqueo cambiado en 10.0 para convertirse en la más estricta (lea: más de un pan de PITA) por no quitar el bloqueo de archivos cuando se quita una capa de la tabla de contenido. Vea también de este artículo y esta relacionada con la pregunta.

1voto

Nick Puntos 3115

Qué necesita para ejecutar su ArcPy secuencia de comandos desde dentro de ArcMap? A menos que sea parte de una interfaz o de la caja de herramientas se han construido, se puede ejecutar fuera de ArcMap desde una consola de Python, INACTIVO, o Eclipse, etc (siempre y cuando usted tiene una licencia que corresponda en la máquina está funcionando). Si este es el caso, usted puede escribir un poco de código en Python para desovar su ArcPy script como un subproceso y se debe liberar el bloqueo cuando el subproceso se cierra.

ArcGIS cerraduras son un dolor de cabeza. He tenido situaciones en las que un bloqueo persiste incluso después de apagar la máquina, que es un monumental dolor (por lo general, si el Arco se ha estrellado antes de que pueda arreglar las cerraduras). Como último recurso, si esto sucede, utilice el Explorador de Windows para encontrar el .La CERRADURA de archivo y eliminarlo manualmente. Esto no funcionará si se accede a ella por ArcMap o Python proceso, por lo que es relativamente seguro... pero esto es realmente un Fuera-de-la Cárcel de la tarjeta y no de la buena práctica :)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X