I am trying to wrap some Python 2 code into Python 3 but having trouble getting the process to work correctly. From ArcGIS Pro, I'm running a custom GP tool with the following code as its script. My goal is to run my Python 2 code (stored in a separate script) against a series of MXDs in order to list the data source for each layer or table. In my case, doing it this way yields no results. The code runs in about 2 seconds and then terminates. Any ideas?
PYTHON 3 SCRIPT (WRAPPER)
import subprocess, os, winreg, sys, arcpy
try:
arcpy.AddMessage("Finding Python 2.7 installation directory...")
hKey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\Python\\PythonCore\\2.7\\InstallPath")
result = winreg.QueryValueEx(hKey, "")[0]
except:
arcpy.AddWarning("Python 2.7 installation directory was not found.")
arcpy.AddError("Script failed.")
sys.exit()
if os.path.exists(result + "\\python.exe"):
arcpy.AddMessage("Launching Python 2.7 executable...")
CREATE_NO_WINDOW = 0x8000000
process = subprocess.Popen([result + "\\python.exe", "C:\\temp\\python\\ListMXDDataSources.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags = CREATE_NO_WINDOW, shell=True, stdin=None)
stdout, stderr = process.communicate()
arcpy.AddMessage('{}'.format(stdout.decode("utf-8")))
arcpy.AddWarning('{}'.format(stderr.decode("utf-8")))
PYTHON 2 SCRIPT
import arcpy, glob
rootDirectory = 'C:/temp'
fileExtension = '.mxd'
def main():
for f in glob.glob(rootDirectory + '/*' + fileExtension):
mxd = arcpy.mapping.MapDocument(f)
for df in arcpy.mapping.ListDataFrames(mxd, ''):
for lyr in arcpy.mapping.ListLayers(mxd, '', df):
if not lyr.isGroupLayer:
if lyr.isRasterLayer:
print "Raster Layer, {}".format(lyr)
elif lyr.isFeatureLayer:
print "Feature Layer, {}, {}".format(lyr, lyr.serviceProperties)
else:
print "Layer, {}".format(lyr)
for tbl in arcpy.mapping.ListTableViews(mxd, '', df):
print "Table, {}".format(tbl.dataSource)
if __name__ == '__main__':
main()