From 48523c197a2a51606ed081e98e38c44bea255dd3 Mon Sep 17 00:00:00 2001 From: Cheryl Sabella Date: Wed, 17 Jan 2018 18:21:38 -0500 Subject: [PATCH 1/2] Issue 6220: Profiler error when run is stopped --- spyder_profiler/widgets/profilergui.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/spyder_profiler/widgets/profilergui.py b/spyder_profiler/widgets/profilergui.py index fff32624ca6..b965247a359 100644 --- a/spyder_profiler/widgets/profilergui.py +++ b/spyder_profiler/widgets/profilergui.py @@ -262,7 +262,7 @@ def start(self, wdir=None, args=None, pythonpath=None): lambda: self.read_output(error=True)) self.process.finished.connect(lambda ec, es=QProcess.ExitStatus: self.finished(ec, es)) - self.stop_button.clicked.connect(self.process.kill) + self.stop_button.clicked.connect(self.kill) if pythonpath is not None: env = [to_text_string(_pth) @@ -276,6 +276,7 @@ def start(self, wdir=None, args=None, pythonpath=None): self.output = '' self.error_output = '' + self.stopped = False p_args = ['-m', 'cProfile', '-o', self.DATAPATH] if os.name == 'nt': @@ -298,7 +299,12 @@ def start(self, wdir=None, args=None, pythonpath=None): if not running: QMessageBox.critical(self, _("Error"), _("Process failed to start")) - + + def kill(self): + """Stop button pressed.""" + self.process.kill() + self.stopped = True + def set_running_state(self, state=True): self.start_button.setEnabled(not state) self.stop_button.setEnabled(state) @@ -344,6 +350,11 @@ def show_data(self, justanalyzed=False): if not filename: return + if self.stopped: + self.datelabel.setText(_('Run stopped by user.')) + self.datatree.initialize_view() + return + self.datelabel.setText(_('Sorting data, please wait...')) QApplication.processEvents() @@ -459,13 +470,16 @@ def initialize_view(self): def load_data(self, profdatafile): """Load profiler data saved by profile/cProfile module""" import pstats - stats_indi = [pstats.Stats(profdatafile),] + try: + stats_indi = [pstats.Stats(profdatafile),] + except (OSError, IOError): + return self.profdata = stats_indi[0] if self.compare_file is not None: try: stats_indi.append(pstats.Stats(self.compare_file)) - except IOError as e: + except (OSError, IOError) as e: QMessageBox.critical( self, _("Error"), _("Error when trying to load profiler results")) From 06129b8f9b2275cba4ae4ed27aacb91a541e6254 Mon Sep 17 00:00:00 2001 From: Cheryl Sabella Date: Wed, 17 Jan 2018 18:32:01 -0500 Subject: [PATCH 2/2] PEP8 --- spyder_profiler/widgets/profilergui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spyder_profiler/widgets/profilergui.py b/spyder_profiler/widgets/profilergui.py index b965247a359..25a285f3795 100644 --- a/spyder_profiler/widgets/profilergui.py +++ b/spyder_profiler/widgets/profilergui.py @@ -471,7 +471,7 @@ def load_data(self, profdatafile): """Load profiler data saved by profile/cProfile module""" import pstats try: - stats_indi = [pstats.Stats(profdatafile),] + stats_indi = [pstats.Stats(profdatafile), ] except (OSError, IOError): return self.profdata = stats_indi[0]