Tôi đã tự hỏi điều gì kích hoạt việc phát hành khóa tập tin trong pyQGIS?
Tôi đang cố gắng xóa một vài nguồn dữ liệu (được sử dụng tạm thời) bằng cách gọi QgsVectorFileWriter.deleteShapeFile
, nhưng tôi phải thoát khỏi QGIS trước khi tôi có thể làm điều đó. Tôi đã tải các nguồn vào các đối tượng QssVectorLayer. Tất cả các đối tượng và tham chiếu đến chúng phải là rác được thu thập trước khi tôi có thể xóa nguồn? Có cách nào để buộc điều này?
Tôi đã quản lý để tạo một mẫu mã tối thiểu không thành công. Hãy chắc chắn rằng temp dir trống trước khi chạy.
from qgis.core import *
import processing, os, gc
project_temp_dir = "C:/Path/To/My/Dir/"
layer1_path = project_temp_dir + "layer1.shp"
layer2_path = project_temp_dir + "layer2.shp"
input_layer = QgsMapLayerRegistry.instance().mapLayersByName('in_layer')[0]
if not input_layer.isValid(): raise Exception("Failed to grab input layer")
# Create layer 1
err = QgsVectorFileWriter.writeAsVectorFormat(input_layer, layer1_path, "utf-8", input_layer.crs())
if err != QgsVectorFileWriter.NoError: raise Exception("Failed to write layer 1")
# Load layer 1
layer1 = QgsVectorLayer(layer1_path, "lyr1", "ogr")
if not layer1.isValid(): raise Exception("Failed to load layer 1")
# Use layer 1 to create layer 2, read-only makes no difference
# if not layer1.setReadOnly(): raise Exception("Could not set layer 1 to read-only")
processing.runalg("qgis:reprojectlayer", layer1, "EPSG:54030", layer2_path)
# Load layer 2
layer2 = QgsVectorLayer(layer2_path, "lyr2", "ogr")
if not layer2.isValid(): raise Exception("Failed to load layer 2")
del layer1
del layer2
del input_layer
gc.collect()
print "Garbage: " + str(gc.garbage) # Empty
# Remove data sources for layers - FAILS!!
for f in os.listdir(project_temp_dir):
if f.endswith(".shp") and not os.path.isdir(project_temp_dir + f):
if not QgsVectorFileWriter.deleteShapeFile(project_temp_dir + f):
# F*%&ing locks.
print "Failed to clear project temp directory."
Tôi thấy rằng nó hoạt động nếu tôi sử dụng QgsVectorFileWriter
để tạo layer2
, thay vì thuật toán xử lý. Tôi nhận được lỗi tương tự nếu thử qgis:clip
thuật toán. Vì vậy, đây có phải là một lỗi trong xử lý? Tôi đang sử dụng nó sai?