You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After a recent update on debian/sid I notice that the screenshot generation ain't work any more.
I found that's because in the function loop.add_handler(proc.stdout.fileno(), proc_callback, 16)
the proc_callback get never called. (with tornado > 5.0)
So I've replace that with a watcher thread to make it work for me.
Here is a patch to fix the issue with tornado >5.0
Additional I've added a signal handler to catch the KeyboardInterrupt and exit clean.
regards
hermann
diff --git a/modsdk/webserver.py b/modsdk/webserver.py
index 5e32201..ffc73e2 100644
--- a/modsdk/webserver.py
+++ b/modsdk/webserver.py
@@ -3,12 +3,18 @@
import json
import os
+import sys
import random
import re
import shutil
import subprocess
import pyinotify
+import asyncio
+import signal
+from threading import Thread
+from queue import Queue
+from pydispatch import dispatcher
from base64 import b64encode
from PIL import Image
from time import time
@@ -511,27 +517,35 @@ class Screenshot(JsonRequestHandler):
tmp_filename = ''.join([ random.choice('0123456789abcdef') for i in range(6) ])
return '/tmp/%s.png' % tmp_filename
+ def proc_callback(self, message):
+ fh = open(self.fname, 'rb')
+ os.remove(self.fname)
+ self.handle_image(fh)
+
+ def proc_watch(self,out, queue):
+ asyncio.set_event_loop(asyncio.new_event_loop())
+ for line in iter(out.readline, b''):
+ queue.put(line)
+ out.close()
+ dispatcher.send(message='screenshoot is ready', signal=self.signal, sender=self.sender)
+ sys.exit()
+
def make_screenshot(self):
- fname = self.tmp_filename()
+ self.fname = self.tmp_filename()
+ self.sender = 'watcher'
+ self.signal = 'ready'
+ dispatcher.connect(self.proc_callback, signal=self.signal, sender=self.sender)
proc = subprocess.Popen([ PHANTOM_BINARY,
SCREENSHOT_SCRIPT,
'http://localhost:%d/icon.html#%s' % (PORT, self.uri),
- fname,
+ self.fname,
self.width,
self.height,
],
stdout=subprocess.PIPE)
-
- def proc_callback(fileno, event):
- if proc.poll() is None:
- return
- loop.remove_handler(fileno)
- fh = open(fname, 'rb')
- os.remove(fname)
- self.handle_image(fh)
-
- loop = ioloop.IOLoop.instance()
- loop.add_handler(proc.stdout.fileno(), proc_callback, 16)
+ self.q = Queue()
+ self.t = Thread(target=self.proc_watch, args=(proc.stdout, self.q))
+ self.t.start()
def handle_image(self, fh):
screenshot_path = self.data['gui']['screenshot']
@@ -786,10 +800,15 @@ def run():
if not check_environment():
return
+ signal.signal(signal.SIGINT, signal_handler)
lv2_init()
welcome_message()
make_application().start()
lv2_cleanup()
+def signal_handler(signal, frame):
+ print(' Thanks for using the MOD-SDK, bye bye.')
+ sys.exit(0)
+
if __name__ == "__main__":
run()
The text was updated successfully, but these errors were encountered:
Hi
After a recent update on debian/sid I notice that the screenshot generation ain't work any more.
I found that's because in the function
loop.add_handler(proc.stdout.fileno(), proc_callback, 16)
the proc_callback get never called. (with tornado > 5.0)
So I've replace that with a watcher thread to make it work for me.
Here is a patch to fix the issue with tornado >5.0
Additional I've added a signal handler to catch the KeyboardInterrupt and exit clean.
regards
hermann
The text was updated successfully, but these errors were encountered: