ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3:超出资源限制时发生异常还是返回代码?

2019-11-12 03:59:19  阅读:233  来源: 互联网

标签:python-3-x exit-code subprocess python


我正在运行python 3.4.3.我有一个子进程,该子进程可能会运行很长时间,或生成太大的文件.我有这个代码.

def setlimits():
    if DEBUG:
        print("Setting resource limit in child (pid {0})".format(os.getpid()))
    resource.setrlimit(resource.RLIMIT_CPU, (.05, .05))  # CPU time in secs
    resource.setrlimit(resource.RLIMIT_FSIZE, (1000000, 1000000)) # file size
    resource.setrlimit(resource.RLIMIT_NOFILE, (20, 20)) # Number open files

然后,我使用此代码调用子流程(在较大的例程内部).

        rc = None
        try:
            rc = subprocess.call(["potentially long-running command"],shell=True, preexec_fn=setlimits) 
        except Exception as err:
            print("Exception happened")
            rc = -1
        print("rc = {0}".format(str(rc)))

当我给它提供一个运行时间很长的进程时,它不会给我一个例外. (基于资源文档,我期望OSError.)它给了我rc = 137.

知道在哪里记录吗?我当然想知道我已经解决了所有情况;我是否需要if rc> 128类型的检查?

解决方法:

137是一个reserved exit code,指示该进程已被终止-等于128 9(其中9表示信号9或SIGKILL).当进程达到其硬CPU限制并被内核杀死时,最有可能发生这种情况.

如果被调用的进程以非零退出状态返回,则subprocess.call()不会引发异常.如果您想要这种行为,最好使用subprocess.check_call()subprocess.run(..., check=True),这将在非零退出状态下引发CalledProcessError.

标签:python-3-x,exit-code,subprocess,python
来源: https://codeday.me/bug/20191112/2024266.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有