我有一个python脚本,它将遍历一堆maya文件并做一些事情。但是有些时候可能会出现seg错误,我的脚本会停在那里。我试过信号和多进程。但都失败了
import os, optparse, glob, json, signal
import maya.standalone
import maya.cmds as cmds
from multiprocessing import Process, Queue
def loadMayaBd():
maya.standalone.initialize(name='python')
def sig_handler(signum, frame):
print "segfault"
def doSome(args, options):
signal.signal(signal.SIGSEGV, sig_handler)
loadMayaBd()
#from here its just a example
fileNameList = args[0]
for eachFile in fileNameList:
#this is throwing the seg fault
#I want continue my for llop even if there is any segfault
#I don't want to exit python coz of that segfault
cmds.file(eachFile, force = 1, open = 1)
if __name__ == "__main__":
usage = "usage: %prog [options] args(file list)"
parser = optparse.OptionParser(usage)
parser.add_option("-l", "--log", dest="log",
help="Log File Path", metavar="LOG_FILE")
parser.add_option("-v", "--verbose", dest="verbose",
help="Print All Logs", metavar="VERBOSE", default=False, action='store_true')
(options, args) = parser.parse_args()
if len(args) <= 0:
errorMsg = "You must pass file path list for crawling"
raise RuntimeError(errorMsg)
p = Process(target=doSome, args=(args, options))
p.start()
p.join()
都失败了。
任何其他可以捕获seg错误并继续下一步的方法?
由于
答案 0 :(得分:3)
这对我有用:
import os
import signal
def sig_handler(signum, frame):
print "segfault"
signal.signal(signal.SIGSEGV, sig_handler)
os.kill(os.getpid(), signal.SIGSEGV)
while True:
pass
您确定要在每个正在产生的过程中捕获段错误吗?