Browse code

Handle OSError exception when invoking 'dot'.

Handle OSError exception when 'dot' is not on PATH.
Previously the program just shut down without any previous warning

v2: Generalize from WindowsError to OSError (Jose)

ehoo authored on 20/03/2014 17:24:38 • José Fonseca committed on 27/03/2014 21:07:44
Showing 1 changed files

  • xdot.py index 77dd866..657ccee 100755
... ...
@@ -1514,16 +1514,22 @@ class DotWidget(gtk.DrawingArea):
1514 1514
     def run_filter(self, dotcode):
1515 1515
         if not self.filter:
1516 1516
             return dotcode
1517
-        p = subprocess.Popen(
1518
-            [self.filter, '-Txdot'],
1519
-            stdin=subprocess.PIPE,
1520
-            stdout=subprocess.PIPE,
1521
-            stderr=subprocess.PIPE,
1522
-            shell=False,
1523
-            universal_newlines=True
1524
-        )
1525
-        xdotcode, error = p.communicate(dotcode)
1526
-        sys.stderr.write(error)
1517
+        try:
1518
+            p = subprocess.Popen(
1519
+                [self.filter, '-Txdot'],
1520
+                stdin=subprocess.PIPE,
1521
+                stdout=subprocess.PIPE,
1522
+                stderr=subprocess.PIPE,
1523
+                shell=False,
1524
+                universal_newlines=True
1525
+            )
1526
+        except OSError as exc:
1527
+            error = '%s: %s' % (self.filter, exc.strerror)
1528
+            p = subprocess.CalledProcessError(exc.errno, self.filter, exc.strerror)
1529
+        else:
1530
+            xdotcode, error = p.communicate(dotcode)
1531
+        error = error.rstrip()
1532
+        sys.stderr.write(error + '\n')
1527 1533
         if p.returncode != 0:
1528 1534
             dialog = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
1529 1535
                                        message_format=error,