Ricevo anche un dizionario vuoto quando eseguo il tuo codice ma quanto segue funziona per me che è leggermente diverso:
from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication
import os
from os.path import expanduser
home = expanduser("~")
QgsApplication( [], False, home + "/AppData/Local/Temp" )
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
app = QApplication([], True)
QgsApplication.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:\path\to\project\project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers
QgsApplication.exitQgis()
app.exit()
Testato su QGIS 2.18.3 per Windows 7 a 64 bit.
Modificare:
La differenza principale, credo, tra il tuo codice e quello che ho usato è che devi creare l'oggetto QApplication prima di creare QgsApplication. Quindi dovresti sostituire:
qgs = QgsApplication([], False)
con questo:
qgs = QApplication([], False)
Ma la classe QApplication deve essere importata, quindi dobbiamo aggiungere quanto segue:
from PyQt4.QtGui import QApplication
E infine, se si desidera eseguire una pulizia, è necessario aggiungere quanto segue alla fine.
QgsApplication.exitQgis()
Quindi potresti provare a usare il seguente codice che è più vicino al tuo codice originale:
from qgis.core import *
from PyQt4.QtCore import QFileInfo
from PyQt4.QtGui import QApplication
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
qgs = QApplication([], False)
QgsApplication.initQgis()
# Get the project instance
project = QgsProject.instance()
# Open the project
project.read(QFileInfo('C:/path/to/project/project.qgs'))
print project.fileName()
# Get the layers in the project
layers = QgsMapLayerRegistry.instance().mapLayers()
print layers
QgsApplication.exitQgis()
QGIS 2.18.2
passaggi provati di OP e @ GermánCarrillo. Qual è la versione di OP?