diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2017-01-17 09:45:36 +0100 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2017-01-17 09:52:15 +0100 |
commit | 0002525abeff6f80e7deb35849f2fc47ce9982a4 (patch) | |
tree | baa1172f8d3483ee4fabc5881db8614a168a4134 /grc/gui/external_editor.py | |
parent | 591369362b985ac721f1c7bd0ef4fea9b5c759d9 (diff) |
grc: fix file monitor on windows (#1169)
I seems tempfile.NamedTemporaryFile() can not be used under windows, as keeping the fp around locks the file for writing. So, we close the the handle after the initial write and delete the file manually.
Diffstat (limited to 'grc/gui/external_editor.py')
-rw-r--r-- | grc/gui/external_editor.py | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/grc/gui/external_editor.py b/grc/gui/external_editor.py index 76f21412b0..010bd71d1a 100644 --- a/grc/gui/external_editor.py +++ b/grc/gui/external_editor.py @@ -34,18 +34,14 @@ class ExternalEditor(threading.Thread): self.editor = editor self.callback = callback - self.tempfile = self._create_tempfile(name, value) + self.filename = self._create_tempfile(name, value) def _create_tempfile(self, name, value): - fp = tempfile.NamedTemporaryFile(mode='w', suffix='.py', - prefix=name + '_') - fp.write(value) - fp.flush() - return fp - - @property - def filename(self): - return self.tempfile.name + with tempfile.NamedTemporaryFile( + mode='wb', prefix=name + '_', suffix='.py', delete=False, + ) as fp: + fp.write(value.encode('utf-8')) + return fp.name def open_editor(self): proc = subprocess.Popen(args=(self.editor, self.filename)) @@ -65,16 +61,18 @@ class ExternalEditor(threading.Thread): if mtime > last_change: # print "file monitor: reload trigger for", filename last_change = mtime - with open(filename) as fp: - data = fp.read() + with open(filename, 'rb') as fp: + data = fp.read().decode('utf-8') self.callback(data) time.sleep(1) except Exception as e: print >> sys.stderr, "file monitor crashed:", str(e) - else: - # print "file monitor: done with", filename - pass + finally: + try: + os.remove(self.filename) + except OSError: + pass if __name__ == '__main__': |