shell可能会生成“Segmentation fault”消息.要找出该过程是否被SIGSEGV杀死,请检查proc.returncode == -signal.SIGSEGV.

如果要查看消息,可以在shell中运行该命令:

#!/usr/bin/env python

from subprocess import Popen, PIPE

proc = Popen(shell_command, shell=True, stdout=PIPE, stderr=PIPE)

out, err = proc.communicate()

print out, err, proc.returncode

我已经用ctypes import *; memset(0,1,1)’中的shell_command =“python -c”测试了它,导致了段错误并且错误捕获了消息.

如果消息直接打印到终端,那么您可以使用pexpect模块捕获它:

#!/usr/bin/env python

from pipes import quote

from pexpect import run # $pip install pexpect

out, returncode = run("sh -c " + quote(shell_command), withexitstatus=1)

signal = returncode - 128 # 128+n

print out, signal

或直接使用pty stdlib模块:

#!/usr/bin/env python

import os

import pty

from select import select

from subprocess import Popen, STDOUT

# use pseudo-tty to capture output printed directly to the terminal

master_fd, slave_fd = pty.openpty()

p = Popen(shell_command, shell=True, stdin=slave_fd, stdout=slave_fd,

stderr=STDOUT, close_fds=True)

buf = []

while True:

if select([master_fd], [], [], 0.04)[0]: # has something to read

data = os.read(master_fd, 1 << 20)

if data:

buf.append(data)

else: # EOF

break

elif p.poll() is not None: # process is done

assert not select([master_fd], [], [], 0)[0] # nothing to read

break

os.close(slave_fd)

os.close(master_fd)

print "".join(buf), p.returncode-128

python段错误原因_python – 捕获崩溃的子进程的“分段错误”...相关推荐

  1. python子进程关闭fd_python – 捕获崩溃的子进程的“分段错误”...

    shell可能会生成"Segmentation fault"消息.要找出该过程是否被SIGSEGV杀死,请检查proc.returncode == -signal.SIGSEGV. ...

  2. linux修改代码段,自修改代码总是在Linux上出现分段错误

    我找到了一篇有关自我修改代码的文章,并尝试做一些示例,但是我总是遇到分段错误.据我所了解,fas违反了内存权限.代码段是(r)ead / e(x)ecute,因此尝试将结果写入此错误.是否可以通过在运 ...

  3. python语法报错原因_python萌新最常见5大错误

    Python 小萌新最常见 5 大错误的: 1. invalid syntax 报错原因:语法错误 首先这个时候需要检查语法是否有用错,如果报错行没有发现错误,通常在相 邻行会出现问题,这个时候就要检 ...

  4. python爬虫超时重试_Python爬虫实例(三):错误重试,超时处理

    错误重试 错误重试用到的方法之一是:@retry()装饰器html 装饰器实际是一个python函数,它的做用就是为被装饰的函数(或对象)进行装饰.包装,可让被装饰的函数(或对象)在不须要作任何代码改 ...

  5. python报错输出到日志_Python日志记录和子进程输出和错误流

    基于Adam Rosenfield's code,你可以 >使用select.select来阻止,直到有要读取的输出 proc.stdout或proc.stderr, >然后读取并记录该输 ...

  6. python代码没有反应_Python代码不执行。没有显示错误

    我不知道我的密码有什么问题.它不会被执行.什么都没有发生,也没有错误发生.我想不通. 如果有人能告诉我我做错了什么,请告诉我,我会很感激的.在class Money (object): def __i ...

  7. python json load失败_python json.loads未终止的字符串错误

    我一直在关注聊天机器人教程,并陷入困境.如果您想知道我的代码是什么样子(我很沮丧,所以我逐字地复制了他的代码),那么我在这篇文章的底部的链接中已经包含了我正在执行的确切步骤. 在我的代码执行期间,在引 ...

  8. 新买电脑用户配置文件错误原因_MacOS Catalina(10.15):黑苹果升级出现错误,也许应该试试这样...

    macOS10.15正式版已经发布推送,确实带来了非常多的新功能,也对于各个设备的融合做了非常多的事情.不管怎么样macOS Catalina都是比较值得升级的. 但是,对于黑苹果来说,每一个大的版本 ...

  9. android获取错误原因,从http读取数据时发生OutOfMemory错误获取请求android

    我正在做一个http获取请求.我需要接收大量数据,但在读取数据时出现OutOfMemory异常.从http读取数据时发生OutOfMemory错误获取请求android 我的代码: public st ...

最新文章

  1. 机器学习问题的十个实例【转】
  2. 火星坐标、百度坐标、WGS84坐标转换代码(JS、python版)
  3. 5G会用什么样的语音通信方案?
  4. 大学计算机组成原理试题答案,计算机组成原理试题及答案(大学期末复习资料).doc...
  5. STM32 基础系列教程 47 - MD5
  6. html可以有多个main吗,main和div
  7. c++ split 方法(转)
  8. java实现分布式redis锁_使用redis实现分布式锁
  9. laravel+vue开发环境搭建
  10. ubuntu20.10上搭建hadoop3.2.2伪分布式
  11. 应聘c语言面试试题,c语言面试最必考的十道试题,求职必看!!!
  12. R语言CRAN软件包Meta分析 1
  13. hive如何获取当前时间
  14. esp8266使用安信可IDE编译、烧录
  15. Ribbon常用配置
  16. Mongo数据库的操作
  17. 网络协议学习笔记 · 22
  18. (二十四)资本资产定价模型
  19. 清华计算机系残疾学生,清华学霸矣晓沅:拖拽着残疾的身体,追求生命的完美...
  20. 新形势下大学生心理健康问题及教育模式探讨

热门文章

  1. 第七章 Web开发实战2——商品详情页
  2. c语言的查询功能,求C语言实现查询功能(如果选择3,如何实现查询)
  3. PHP图片上传,框架通用
  4. cURL error 60: SSL certificate problem: unable to get local issuer certificate 解决思路
  5. PHP中this,self,parent的区别
  6. PHP预防XSS攻击,ajax跨域攻击的方法
  7. 2020计算机基础知识考试题及答案,2020年计算机二级公共基础知识考试模拟习题及答案...
  8. c语言1 2 3 10000,在网上看到一个求2的10000次方的方法,有个地方看不懂,求大佬...
  9. python tempfile cleanup_Python tempfile模块:生成临时文件和临时目录
  10. php正则表达式正向预查,javascript正则表达式-----正向预查