Скрипт Python для запуска FME Workbench
У меня более 500 XML-файлов, и каждый XML-файл должен обрабатываться в FME-среде отдельно (итерация FME-среды для каждого XML-файла). Для такого предложения мне нужно запустить файл python (IDLE 2.7 или альтернативную консоль python), чтобы выполнить итерации рабочей среды FME для каждого файла xml.
Весь процесс в прошлом работал на другом ПК без каких-либо проблем. Теперь, когда я запустил модуль, я получил следующую ошибку:
Трассировка (последний вызов был последним):E:\XML_Data File "E:\XML_Data\process\01_XML_Tile_1.py", строка 28, если "Перевод был УСПЕШНЫМ" в открытом (path_log + "\" + data + ".log").read(): IOError: [Errno 2] Нет такого файла или каталога: 'E:\XML_Data\data_out\log_01\re_3385-5275.xml.log'
Прикрепленный код питона.
Любая помощь с благодарностью.
import os
import time
# Mainpath and Working Folder:
#path_main = r"E:\XML_Data"
path_main = r"E:\XML_Data"
teil = str("01")
# variables
path_in = path_main + r"\data_in\03_Places\teil_" + teil # "Source folder of XML files"
path_in_tile10 = path_main + r"\data_in\01_Tiling\10x10.shp" # "Source folder of Grid shapefile"
path_in_commu = path_main + r"\data_in\02_Communities\Communities.shp" # "Source folder of Communities shapefile"
path_out = path_main + r"\data_out\teil_" + teil # "Output folder of shapefiles that resulted from XML files (tile_01 folder)"
path_log = path_main + r"\data_out\log_" + teil # "Output folder of log files for each run(log_01 folder)"
path_fme = r"%FME_EXE_2015%" # "C:\Program Files\FME2015\fme.exe"
path_fme_workbench = path_main + r"\process\PY_FME2015.fmw" # "path of FME workbench"
datalists = os.listdir(path_in)
count = 0
# Schleife, in which each file is processed individually in FME
for data in datalists:
if data.find(".xml") != -1:
count +=1
print ("Run-No." + str(count) + ": with data " + data)
os.system (path_fme + " " + path_fme_workbench + " " + "--SourceDataset_XML"+ " " + path_in + "\\" + data + " " + "--SourceDataset_SHAPE" + " " + path_in_tile10 + " " + "--SourceDataset_SHAPE_COMU" + " " + path_in_commu + " " + "--DestDataset_SHAPE" +" " +path_out + " " +"LOG_FILENAME" + " " + path_log + "\\" + data + ".log" )
print ("Data processed: " + data)
shape = str(data[19:28]) + "_POPINT_CENTR_UTM32N.shp"
print ("ResultsFileName: " + shape)
if "Translation was SUCCESSFUL" in open(path_log + "\\" + data + ".log").read():
# Translation was successful and SHP file exists:
if os.path.isfile(path_out + "\\" + shape):
write_log = open(path_out + "\\" + "result_xml.log", "a")
write_log.write(time.asctime(time.localtime()) + " " + shape + "\n")
write_log.close()
print("Everything ok")
#Translation was successful, but SHP file does not exist:
else:
write_log = open(path_out + "\\" + "error_xml.log", "a")
write_log.write(time.asctime(time.localtime()) + " Data: " + shape + " unavailable.\n")
write_log.close()
# Translation was not successful:
else:
write_log = open(path_out + "\\" + "error_xml.log", "a")
write_log.write(time.asctime(time.localtime()) + " Translation " + Data + " not successful.\n")
write_log.close()
print ("Number of calculated files: " + str(count))
4 ответа
Скорее всего, скрипт os.system
строка, поэтому файл журнала не был создан из команды. Поскольку вы упомянули другой компьютер, это может быть вызвано многими причинами, например другой версией FME (поэтому переменная среды%FME_EXE_2015% не будет существовать).
Версия FME устарела, поэтому сначала проверьте версию, не создает ли она проблемы.
Для этого используйте бегунок-трансформер рабочего пространства.
subprocess.call(["C:/Program Files/fme/FMEStarter/FMEStarter.exe", "C:/Program Files/fme/fme20238/fme.exe", "/fmefile.fmw" "LOG_FILENAME","logfile"], stdin=None, stdout=None, stderr=None, shell=True, timeout=None)