分段错误捕获

Segmentation Fault Catch(分段错误捕获)
本文介绍了分段错误捕获的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个 python 脚本,它会遍历一堆 maya 文件并做一些事情.但是有时玛雅会出现段错误,我的脚本会停在那里.我尝试使用 signalmultiprocess.但都失败了.

I have a python script and it will loop through bunch of maya files and do some stuff. But some time maya get seg fault and my script will stop there. I tried with signal and multiprocess. But both failed.

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 fault 并继续下一步?

Is there any other method which can trap seg fault and continue with next?

推荐答案

这对我有用:

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

您确定要在生成的每个进程中捕获段错误吗?

Are you sure you are trapping the segfault in each process that you are spawning?

这篇关于分段错误捕获的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

build conda package from local python package(从本地 python 包构建 conda 包)
How can I see all packages that depend on a certain package with PIP?(如何使用 PIP 查看依赖于某个包的所有包?)
How to organize multiple python files into a single module without it behaving like a package?(如何将多个 python 文件组织到一个模块中而不像一个包一样?)
Check if requirements are up to date(检查要求是否是最新的)
How to upload new versions of project to PyPI with twine?(如何使用 twine 将新版本的项目上传到 PyPI?)
Why #egg=foo when pip-installing from git repo(为什么从 git repo 进行 pip 安装时 #egg=foo)