~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to src/bin/python-server

  • Committer: drtomc
  • Date: 2007-12-18 03:33:34 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:77
A start on the python executor for the console. Lots of stuff to add, fix, etc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
import socket
 
4
import cStringIO
 
5
import codeop
 
6
import sys
 
7
import cjson
 
8
import signal
 
9
 
 
10
def req_lines(sok):
 
11
    buf = ''
 
12
    s = sok.recv(4096)
 
13
    while len(s) > 0:
 
14
        buf = buf + s
 
15
        i = buf.find('\r\n')
 
16
        while i != -1:
 
17
            l = buf[0:i]
 
18
            yield l
 
19
            buf = buf[i+1:]
 
20
            i = buf.find('\r\n')
 
21
        s = sok.recv(4096)
 
22
 
 
23
def timeout(signum, frame):
 
24
    print 'signal: ', signum
 
25
    raise Exception, 'Timeout!'
 
26
 
 
27
signal.signal(signal.SIGALRM, timeout)
 
28
 
 
29
sok = socket.socket(socket.AF_INET)
 
30
sok.bind(('localhost',9998))
 
31
sok.listen(1)
 
32
(new_sok,addr) = sok.accept()
 
33
 
 
34
c = codeop.CommandCompiler()
 
35
 
 
36
globs = {}
 
37
locos = {}
 
38
globs['__builtins__'] = globals()['__builtins__']
 
39
 
 
40
out = cStringIO.StringIO()
 
41
sys.stdout = out
 
42
first = True
 
43
for line in req_lines(new_sok):
 
44
    if first:
 
45
        src = line
 
46
        first = False
 
47
    else:
 
48
        src = src + '\n' + line
 
49
    cmd = c(src)
 
50
    if cmd is not None:
 
51
        signal.alarm(5)
 
52
        res = eval(cmd, globs, locos)
 
53
        signal.alarm(0)
 
54
        new_sok.send(cjson.encode((out.getvalue(),res)) + '\n')
 
55
        out = cStringIO.StringIO()
 
56
        sys.stdout = out
 
57
        first = True
 
58
 
 
59
sok.shutdown(socket.SHUT_RDWR)