File: alarm.py

package info (click to toggle)
pypy3 7.0.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 111,848 kB
  • sloc: python: 1,291,746; ansic: 74,281; asm: 5,187; cpp: 3,017; sh: 2,533; makefile: 544; xml: 243; lisp: 45; csh: 21; awk: 4
file content (44 lines) | stat: -rw-r--r-- 1,248 bytes parent folder | download | duplicates (10)
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
"""
Usage:

    python alarm.py <timeout> <scriptname> <args...>

Run the given script.  If the timeout elapses, trying interrupting it by
sending KeyboardInterrupts.
"""

def _main_with_alarm(finished):
    import sys, os
    import time
    import thread


    def timeout_thread(timeout, finished):
        stderr = sys.stderr
        interrupt_main = thread.interrupt_main
        sleep = time.sleep
        now = time.time
        while now() < timeout and not finished:
            sleep(1.65123)
        if not finished:
            stderr.write("="*26 + "timedout" + "="*26 + "\n")
            while not finished:
                # send KeyboardInterrupt repeatedly until the main
                # thread dies.  Then quit (in case we are on a system
                # where exiting the main thread doesn't kill us too).
                interrupt_main()
                sleep(0.031416)


    timeout = time.time() + float(sys.argv[1])
    thread.start_new_thread(timeout_thread, (timeout, finished))
    del sys.argv[:2]
    sys.path.insert(0, os.path.dirname(sys.argv[0]))
    return sys.argv[0]

if __name__ == '__main__':
    finished = []
    try:
        execfile(_main_with_alarm(finished))
    finally:
        finished.append(True)