4 votos

ArcPy script se bloquea después de aproximadamente una hora

He escrito un script que busca a través de microstation archivos de CADD, encuentra que se ajustan a una determinada convención de nomenclatura y tira de ellos en una geodatabase con la CADtoGeodatabase herramienta. Este script funciona bien durante aproximadamente una hora y luego deja de funcionar. No hay mensajes de error se muestran en la consola. Una ventana emergente diciendo que python ha dejado de funcionar.

Sé que hay cerca de 3000 archivos que necesitan ser convertidos y mi script se bloquea después de unos 220. Antes de intentar la conversión puedo asegurar que la ruta de acceso del archivo no tiene espacios y he quitado todas las instrucciones de impresión de la secuencia de comandos. La suma de estos dos pasos permite que el script se ejecute un poco más de tiempo (originalmente se bloquea después de unos 200 archivos).

¿Cuál podría ser la causa de que esto suceda?

import os, logging, re, arcpy

LOG_FILENAME = 'CADcopy.log'
logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
rootDir = "CADDirectory"


exten = 'namingConventionMatchRegex'
arcpy.env.workspace = "workspace"
counter = 0
def step(ext, dirname, names):
    #print dirname

    x = re.search("xample",dirname.lower())
    if(x):
        return #Do not try to process example data
    for name in names:

        r = re.search(ext, name.lower())
        if(r):
           global counter
           counter = counter + 1
           fileName = os.path.join(dirname, name)
           s = re.search(" ",fileName)
           if(s):
               #print("{} skipped because file path contains space character.".format(name))
               logging.debug("Unable to convert ,{},. File location: ,{}".format(name, os.path.join(dirname, name)))
               return

           #This block gets basic information about the file from its directory tree and incorporates it into the new dataset name
           if name.lower().endswith("endingType1"):
               planType = "Type1"
           else:
               planType = "Type2"

           split = fileName.split('CommonDirectory')
           split2 = split[1].split('\\')
           table = split2[1]+split2[2]+'_'+str(counter)+planType

           #Try to convert to geodatabase. If it already exists, do nothing, else log the filename and path for later review
           try:
               arcpy.CADToGeodatabase_conversion(fileName, arcpy.env.workspace, table, 100)
           except:
               msg = arcpy.GetMessages(2)
               if(msg.startswith("ERROR 000258")):
                  pass 
                  #print("File already exists")
               else:
                  #print("Failed to convert {} at filePath {}".format(table, fileName))
                  logging.debug("Failed to convert ,{}, at filePath ,{}".format(table, fileName))

os.path.walk(rootDir, step, exten)

3voto

GeneQ Puntos 2885

Tuve un problema similar en el pasado, no estoy seguro si tienes el mismo problema pero aquí está la respuesta que me ayudó:

Cómo utilizar carpetas de Windows como parámetros arcpy

Mucha de las funciones de arcpy son solo contenedores de una biblioteca COM, cosas raras pasa porque el archivo de caminos son tratados como escapó de cuerdas aún cuando Ud. Utilice \ en el camino.

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