[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