[Qgis-developer] release file after processing.runalg

Stefan Kiefer st_kiefer at web.de
Thu Apr 27 07:07:32 PDT 2017


Hi enrico,
as far as I see from the reference you added the solution would be to add the result (resp. output) to a Layer instead "tempOutput". Then you remove that Layer, I suppose while removing the layer a reference on "tempOutput" ist released.

cheers

Stefan

> enrico chiaradia <enrico.chiaradia at yahoo.it> hat am 27. April 2017 um 15:13 geschrieben:
> 
> 
> Dear List,
> 
> I'd like to remove an existing file (see [tempOutput]) after it was used 
> by a geoalgorithm. The geoalgorithm works perfectly but after its 
> execution, the file [tempOutput] is locked.
> 
> Here a simple test script that returns "[Error 32] The process cannot 
> access the file because it is being used by another process: 
> 'D:/test_alg/map_to_clip.tif'":
> 
> import processing
> import os
> 
> tempOutput = 'D:/test_alg/map_to_clip.tif'
> maskFN = 'D:/test_alg/mask.shp'
> output = 'D:/test_alg/clipped_map.tif'
> 
> algRes = processing.runalg("gdalogr:cliprasterbymasklayer",
>                                          tempOutput,
>                                          maskFN,
> "-9999",False,False,False,5,4,75,6,1,False,0,False,"",
>                                          output)
> 
> try:
>      os.remove(tempOutput)
> except Exception as e:
>      print e
> 
> I also found a solution on the web [1] but it doesn't work for me :( If 
> I understand correctly, the trick is to load the file as layer and then 
> release it. Here its implementation:
> 
> import processing
> import os
> 
> tempOutput = 'D:/test_alg/map_to_clip.tif'
> maskFN = 'D:/test_alg/mask.shp'
> output = 'D:/test_alg/clipped_map.tif'
> 
> algRes = processing.runalg("gdalogr:cliprasterbymasklayer",
>                                          tempOutput,
>                                          maskFN,
> "-9999",False,False,False,5,4,75,6,1,False,0,False,"",
>                                          output)
> 
> try:
>      # add to the map
>      tempLay = QgsRasterLayer(tempOutput, "tempLay")
>      if not tempLay.isValid(): raise Exception("Failed to load tempLay")
>      QgsMapLayerRegistry.instance().addMapLayer(tempLay) #!!!!
> 
>      layermap = QgsMapLayerRegistry.instance().mapLayers()
>      for i, layer in layermap.iteritems():
>        print 'layername',layer.source()
>        if layer.source() == tempOutput:
>          # Remove layer references
>          QgsMapLayerRegistry.instance().removeMapLayer(layer.id()) #!!!!
>          # Delete the file
>          os.remove(tempOutput)
> 
> except Exception as e:
>      print e
> 
> I didn't find any other solution for the moment. Any suggestion is 
> really very appreciate!
> 
> Thanks
> 
> enrico
> 
> 
> [1] 
> https://gis.stackexchange.com/questions/93143/can-not-delete-file-after-using-runalg-function
> 
> 
> 
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer


More information about the Qgis-developer mailing list