Hi Stefan, thanks again!
the file "map_to_clip.tif" is saved on the HD and it is not submitted to any process before executing the script (I know that because I can delete it before running the script). At the same time, I noticed that the file "map_to_clip.tif.aux.xml" was created after running the script and closing qgis (absolutely, I did no other things!).
Can that suggest the process that locks the file?


Il 28/04/2017 11:00, Stefan Kiefer ha scritto:
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 <[email protected]> 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 <[email protected]> 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
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer


_______________________________________________
Qgis-developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to