错误:分段错误(核心已转储)
我是python的新手,正在遇到一个奇怪的错误:
Segmentation fault (core dumped)
当我执行以下代码时:
class Workspace(QMainWindow, Ui_MainWindow): """ This class is for managing the whole GUI `Workspace'.
Currently a Workspace is similar to a MainWindow
"""
def __init__(self):
#p= subprocess.Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/', shell=True, stdout=subprocess.PIPE, bufsize= 4024)
try:
from Queue import Queue, Empty
except ImportError:
while True:
#from queue import Queue, Empty # python 3.x
print "error"
ON_POSIX = 'posix' in sys.builtin_module_names
def enqueue_output(out, queue):
for line in iter(out.readline, b''):
queue.put(line)
out.close()
p= Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/',stdout=PIPE, shell=True, bufsize= 4024)
q = Queue()
t = threading.Thread(target=enqueue_output, args=(p.stdout, q))
#t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # thread dies with the program
t.start()
# ... do other things here
def myfunc(q):
while True:
try: line = q.get_nowait()
# or q.get(timeout=.1)
except Empty:
print('Vacio')
else: # got line
# ... do something with line
print line
thread = threading.Thread(target=myfunc, args=(q,))
thread.start()
这部分代码是从程序的stdout中读取的。当我myfunc
在线程外执行 时,它将起作用!但是当我在fais线程中执行它时…有什么建议吗?
回答:
"Segmentation fault (core
dumped)"是当程序退出并带有SIGSEGV
信号并且启用了核心创建时Linux打印的字符串。这意味着 某些 程序已崩溃。
如果您实际上是通过运行Python遇到此错误,则意味着Python解释器已崩溃。发生这种情况只有几个原因:
您正在使用用C编写的第三方扩展模块,并且该扩展模块已崩溃。
您(直接或间接)使用内置模块
ctypes
,并调用崩溃的外部代码。您的Python安装有问题。
您发现了应该报告的Python错误。
首先是迄今为止最常见的。如果您q
是某个第三方扩展模块中某个对象的实例,则可能需要查看文档。
通常,当C模块崩溃时,这是因为您所做的事情是无效的,或者至少是不常见且未经测试的。但是,从某种意义上说,这是否是您的“过失”都没关系。该模块 应
引发可调试的Python异常,而不是崩溃。因此,您可能应该向编写扩展的人员报告错误。但是,与此同时,您无需等待6个月的时间来修复错误并发布新版本,而是需要弄清楚触发崩溃的原因是什么,以及是否有其他方法可以实现所需的功能。或切换到其他库。
另一方面,由于您正在从其他地方读取和打印数据,因此您的Python解释器可能会读取该行"Segmentation fault (core
dumped)"并忠实地打印所读取的内容。在这种情况下,其他上游程序可能崩溃了。(甚至可能没有人崩溃—如果您从Web上获取此页面并打印出来,您将得到同一行,对吗?)在您的情况下,根据您的评论,可能是Java程序崩溃了。
如果您不确定是哪种情况(并且今天不想学习如何进行过程管理,核心文件检查或C级调试),则有一种简单的测试方法:在print
line添加一行之后print "And I'm OK"
。如果您看到那Segmentation
fault行之后,那么Python并没有崩溃,其他人却崩溃了。如果您没有看到它,则可能是Python崩溃了。
以上是 错误:分段错误(核心已转储) 的全部内容, 来源链接: utcz.com/qa/406163.html