[Qgis-developer] release file after processing.runalg
Stefan Kiefer
st_kiefer at web.de
Fri Apr 28 02:00:37 PDT 2017
Hi Enrico,
how is that file map_to_clip.tif created? There still could be a reference on that file, maybe because of the generation process (I assume that because you call it tempOutput, so there could be still a reference from another process). For example, if that file is visualized somewhere there definitly is a referene on that file.
cheers
Stefan
> enrico chiaradia <enrico.chiaradia at yahoo.it> hat am 27. April 2017 um 16:29 geschrieben:
>
>
> Hi Stefan and many thanks for your answer! but it seems not working :(
> Here the new code. I replaced "tempOutput" with "output". Layer is
> correctly loaded and removed but "tempOutput" cannot be deleted.
>
> 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(output, "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():
> if layer.source() == output:
> print 'layername',layer.source()
> # Remove layer references
> QgsMapLayerRegistry.instance().removeMapLayer(layer.id()) #!!!!
>
> # Delete the file
> os.remove(tempOutput)
>
> except Exception as e:
> print e
>
>
>
>
> Il 27/04/2017 16:07, Stefan Kiefer ha scritto:
> > 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