Quantcast
Channel: Question and Answer » gdal
Viewing all articles
Browse latest Browse all 397

gdal_array.SaveArray() leaves dataset open in Python

$
0
0

When I use gdal_array.SaveArray() to create a raster, the newly created dataset appears to stay open in Python, preventing other processes from working with it. For instance, consider the following (super minimal) code:

>>> a = np.arange(300).reshape((3, 10, 10))
>>> gdal_array.SaveArray(a, "test.tif")
<osgeo.gdal.Dataset; proxy of <Swig Object of type 'GDALDatasetShadow *' at 0x0458B968> >
>>> os.rename("test.tif", "test2.tif")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by another process

I am similarly prevented from moving, renaming, or deleting the file directly from Windows explorer, with the message The action can't be completed because the file is open in python.exe. More importantly, I can’t open the file some visualization/processing programs that I use. Once I exit python, the file is “released” and I can manipulate it to my heart’s content.

It doesn’t seem like the file has a name associated with it, so I can’t close it as I would a raster that I had specifically opened:

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'a', 'gdal', 'gdal_array', 'np', 'os']

What causes this behavior? Is there a way to call SaveArray() such that it doesn’t keep the file opened after writing it? Or, a way to close the file from within Python?

In case it’s important, my Python bindings are from gdal 1.11.1 for Python 2.7.8 on Windows 7.


Viewing all articles
Browse latest Browse all 397

Trending Articles