File: processor.py

package info (click to toggle)
pyinstaller 6.16.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,748 kB
  • sloc: python: 41,632; ansic: 11,944; makefile: 172; sh: 132; xml: 19
file content (62 lines) | stat: -rw-r--r-- 1,764 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#! /usr/bin/env python
# encoding: utf-8
# WARNING! Do not edit! https://waf.io/book/index.html#_obtaining_the_waf_file

import os, sys, traceback, base64, signal
try:
    import cPickle
except ImportError:
    import pickle as cPickle
try:
    import subprocess32 as subprocess
except ImportError:
    import subprocess
try:
    TimeoutExpired = subprocess.TimeoutExpired
except AttributeError:

    class TimeoutExpired(Exception):
        pass


def run():
    txt = sys.stdin.readline().strip()
    if not txt:
        sys.exit(1)
    [cmd, kwargs, cargs] = cPickle.loads(base64.b64decode(txt))
    cargs = cargs or {}
    if not 'close_fds' in kwargs:
        kwargs['close_fds'] = False
    ret = 1
    out, err, ex, trace = (None, None, None, None)
    try:
        proc = subprocess.Popen(cmd, **kwargs)
        try:
            out, err = proc.communicate(**cargs)
        except TimeoutExpired:
            if kwargs.get('start_new_session') and hasattr(os, 'killpg'):
                os.killpg(proc.pid, signal.SIGKILL)
            else:
                proc.kill()
            out, err = proc.communicate()
            exc = TimeoutExpired(proc.args, timeout=cargs['timeout'], output=out)
            exc.stderr = err
            raise exc
        ret = proc.returncode
    except Exception as e:
        exc_type, exc_value, tb = sys.exc_info()
        exc_lines = traceback.format_exception(exc_type, exc_value, tb)
        trace = str(cmd) + '\n' + ''.join(exc_lines)
        ex = e.__class__.__name__
    tmp = [ret, out, err, ex, trace]
    obj = base64.b64encode(cPickle.dumps(tmp))
    sys.stdout.write(obj.decode())
    sys.stdout.write('\n')
    sys.stdout.flush()


while 1:
    try:
        run()
    except KeyboardInterrupt:
        break