[Qgis-developer] release file after processing.runalg
enrico chiaradia
enrico.chiaradia at yahoo.it
Thu Apr 27 07:29:31 PDT 2017
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20170427/8fbe61b9/attachment.html>
More information about the Qgis-developer
mailing list