我正在尝试使用多重处理来执行脚本。但是在出现错误的情况下,脚本不会引发异常并退出处理。是否有可能引发异常并退出执行。由于我是python的新手,所以我不知道该怎么做。
下面是我写的脚本:
import os
import sys
import string
import multiprocessing as mp
path=sys.argv[1]
path_tpt=path+'/tpt_script'
""" Multiprocessing module to generate intermediate exports"""
total_tpt_file_list = []
for filename in os.listdir(path_tpt):
total_tpt_file_list.append(os.path.join(path_tpt,filename))
total_tpt_file_list = list(filter(lambda x:x.endswith('.tpt'), total_tpt_file_list))
total_tpt_file_list = sorted(total_tpt_file_list)
print(total_tpt_file_list)
def run_sed (file_list):
x=file_list.rsplit("/", 2)
y=x[0]
file_name=x[2]
print(file_name)
path_ctl=str(y)+'/ctl_file'
path_tpt=str(y)+'/tpt_script'
path_log=str(y)+'/log'
print("tbuild -f "+ (file_list) + " -j "+ 'tpt_chk_$$ '+ '> '+ os.path.join(path_log,file_name).split('.')[0]+'.log 2>>'+ os.path.join(path_log,file_name).split('.')[0]+'.log')
status=os.system("tbuild -f "+ (file_list) + " -j "+ 'tpt_chk_$$ '+ '> '+ os.path.join(path_log,file_name).split('.')[0]+'.log 2>>'+ os.path.join(path_log,file_name).split('.')[0]+'.log')
try:
p = mp.Pool(processes=(mp.cpu_count()-1))
total_file_list = p.map(run_sed,total_tpt_file_list)
finally:
p.close()
p.join()
print("done")
请让我知道是否需要更多信息。
预先感谢。
答案 0 :(得分:0)
鉴于我所看到的,
Python异常将被传播回去,我猜想您是想引发os.system
调用中的错误。您需要执行
if status != 0:
raise Exception("eeek")
我真正建议您使用os.system
https://docs.python.org/3/library/subprocess.html#subprocess.check_output而不是使用subprocess.check_output
它将自动检查子流程调用的状态代码,并使用状态代码和输出文本引发任何异常。因此,您的代码应类似于:
subprocess.check_output(["tbuild", "-f"] + file_list + ["-j", "tpt_chk_$$", ...
您可能还想返回输出(return subprocess.check_output...
)