我也遇到了这个。我的第一个解决方案是将处理拆分为第一个脚本,该脚本遍历目录以查找mxd,然后使用子进程。Popen调用第二个脚本,该脚本接受MXD路径作为参数。这样,执行处理的脚本将只运行一个MXD,然后关闭。缺点是,我不得不等待arcpy导入到每一个单独的,1100 mxd加起来。我不是100%确定为什么当你运行多个MXD时会发生错误,但我认为replaceDataSource()消耗了到目标SDE的连接池。在处理了一两个MXD之后,您就不能再连接它了。解决方案是使用arcpy.ClearWorkspaceCache_management()重置SDE连接。您还应该首先删除对mxd对象的引用。一个简化的代码示例如下:对于dirName, subdirList, fileList in os.walk(source_dir):对于fname in fileList: if fname.endswith(".mxd") mxd = arcpy.mapping.MapDocument(os.path.join(dirName,fname))对于lyr in arcpy.mapping.ListLayers(mxd):如果不是lyr.supports("DATASOURCE"):继续if "\GIS Data\Arc Layers\示例。Shp "在lyr。dataSource: newPath = r"数据库连接\SDEConnection. "sde" newSource = "Example" try: print "Replacing data source of " + lyr.name lyr.replaceDataSource(newPath,'SDE_WORKSPACE', newSource) except Exception, e: print e del mxd arcpy.ClearWorkspaceCache_management( r"Database Connections\SDEConnection.sde")
...查看更多