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)
... | ... |
@@ -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, |