import os
import shutil
import xml.dom.minidom
import sys
import time
def makedir(dst_filepath):
folder = os.path.exists(dst_filepath)
if not folder:
os.makedirs(dst_filepath)
def tohour(second):
hour,minute=0,0
minute = int(second/60)
if minute>=1:
second = second - minute * 60
hour = int(minute/60)
if hour >=1:
minute = minute - hour * 60
if hour>0:
str = "%dh%2dm%0.2fs" %(hour,minute,second)
elif minute>0:
str = "%2dm%0.2fs" %(minute,second)
else:
str = "%0.2fs" % (second)
return str
def iter_files(input, keyword_list):
aim_file_list = []
curlist = os.listdir(input)
for file in curlist:
cur_file = os.path.join(input, file)
if os.path.isdir(cur_file):
get_list = iter_files(cur_file,keyword_list)
aim_file_list = aim_file_list + get_list
else:
flags = len(keyword_list)
for keyword in keyword_list:
if file.find(keyword) >=0:
flags = flags - 1
else:
break
if flags==0:
aim_file_list.append(cur_file)
return aim_file_list
def generate_xml(srcfile,dstdir,modelxml,job_order):
if not os.path.isfile(modelxml):
print("model xml error")
return
shutil.copy(modelxml, job_order)
# 使用minidom解析器打开 XML 文档
doc = xml.dom.minidom.parse(job_order)
root = doc.documentElement
input_file_node = root.getElementsByTagName("File_Name")[0]
input_text_node = input_file_node.childNodes[0]
input_text_node.nodeValue = srcfile
output_dir_node = root.getElementsByTagName("File_Name")[1]
out_text_node = output_dir_node.childNodes[0]
out_text_node.nodeValue = dstdir
#print(input_text_node.data)
#print(out_text_node.data)
f = open(job_order, 'w')
doc.writexml(f, indent='',addindent='\t', newl='\n', encoding='utf-8')
f.close()
def mult_run():
input_dir = r"D:\VMcentosShare\DATAROOT"
work_dir = r"D:\VMcentosShare\DATAROOT\work_dir"
template_xml = r"D:\VMcentosShare\DATAROOT\IPF\hy1_oct_l2d_pro\release\template.xml"
mode_exe2 = r"D:\VMcentosShare\DATAROOT\IPF\hy1_oct_l2d_pro\release\V1.00\processing\hy1_oct_l2d_pro_V1.00.sh"
processing_exe = r"D:\VMcentosShare\HY1\HY1Code\HDF5toGTiffV1.0\Bin\HDF5toGTiff.exe"
# input_dir = r"/mnt/hgfs/VMcentosShare/DATAROOT"
# work_dir = r"/mnt/hgfs/VMcentosShare/DATAROOT/work_dir"
# template_xml = r"/mnt/hgfs/VMcentosShare/DATAROOT/IPF/hy1_oct_l2d_pro/release/template.xml"
# processing_exe = r"/mnt/hgfs/VMcentosShare/DATAROOT/IPF/hy1_oct_l2d_pro/release/V1.00/processing/hy1_oct_l2d_pro_V1.00.sh1"
# input_dir = sys.argv[1]
# work_dir = sys.argv[2]
# template_xml = sys.argv[3]
# processing_exe = sys.argv[4]
if not os.path.isdir(input_dir):
print("input_dir error,check you inputdir is exist.%s" % (input_dir))
exit()
keyword_list = ["_10.h5", "H1C_OPER_OCT_L1B"]
input_file_list = iter_files(input_dir, keyword_list)
IS_REDO = False
total_num = len(input_file_list)
print("search over, total num:%d" % (total_num))
if total_num == 0:
print("search [.h5] error,check you inputdir")
exit()
if not os.path.isfile(template_xml):
print("template_xml error,check you template_xml is exist")
exit()
if not os.path.isfile(processing_exe):
print("processing_exe error,check you processing_exe is exist")
exit()
job_order_dir = os.path.join(work_dir, "job_order")
output_dir = os.path.join(work_dir, "output")
log_dir = os.path.join(work_dir, "log")
makedir(job_order_dir)
makedir(output_dir)
makedir(log_dir)
start_id = 100000001
jober_list = []
# 生成job order
print("start generate job_order")
for i in range(0, len(input_file_list)):
inputfile = input_file_list[i]
id = start_id + i
job_order_name = "%d.xml" % (id)
job_order = os.path.join(job_order_dir, job_order_name)
dstdir = os.path.join(output_dir, "%d" % (id))
makedir(dstdir)
generate_xml(inputfile, dstdir, template_xml, job_order)
jober_list.append(job_order)
# 开始执行
total_log = os.path.join(work_dir, "total_log.txt")
f = open(total_log, "a+")
print("start to run...")
total_task = len(jober_list)
for i in range(0,total_task):
job_order = jober_list[i]
id = start_id + i
log_name = "%d.log" % (id)
log_path = os.path.join(log_dir, log_name)
if IS_REDO and os.path.exists(log_path):
continue
cmd = "%s %s>%s 2>&1" % (processing_exe, job_order, log_path)
start = time.time()
return_code = os.system(cmd)
end = time.time()
cost_time = (end -start)
print("progress num[%d]:cost time:%s, left time:%s " % (i+1,tohour(cost_time), tohour(cost_time*(total_task-i-1))))
f.write("num[%d] %d %s\n" % (i + 1, return_code, input_file_list[i]))
f.close()
if __name__ == '__main__':
mult_run()
python批处理调可执行程序
最新推荐文章于 2024-08-03 09:36:40 发布