Прикреплённый файл «2013-02-01.univ_shell.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Написать программу, многократно запускающую генератор теста и решатель
5 и убивающую решатель, если он работает слишком долго
6 '''
7
8 import sys, time
9 from subprocess import *
10
11 # Если первый параметр число, это количество запусков
12 if sys.argv[1].isdigit():
13 N=int(sys.argv[1])
14 sys.argv.pop(1)
15 else:
16 N=1000
17 # Теперь первый параметр -- это генератор, последний -- решатель,
18 # а всё, что между ними -- параметры запуска генератора
19
20 Generator=sys.argv[1]
21 Solver=sys.argv[-1]
22 Args=sys.argv[2:-2]
23 Python=sys.executable
24
25 for i in xrange(N):
26 gen = Popen([Python, Generator]+Args, stdout=PIPE)
27 sol = Popen([Python, Solver], stdin=gen.stdout, stdout=PIPE)
28 gen.stdout.close()
29 for j in xrange(10):
30 # Предполагается, что sol выводит немного информации,
31 # не больше, чем размер одного буфера обмена в системе.
32 # Если выдачи больше, чем буфер обмена, sol будет ждать, пока мы
33 # прочитаем всё из этого буфера, и только после этого продолжит
34 # вывод. Завершится sol только когда всё выведет.
35 if sol.poll() is not None:
36 break
37 else:
38 time.sleep(1)
39 else:
40 print "Killing", sol.pid
41 sol.kill()
42 continue
43
44 Res=sol.communicate()[0]
45 print Res
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2013-02-08 11:22:13, 3.9 KB) [[attachment:2013-01-25.koleso.py]]
- [получить | показать] (2013-02-08 11:21:37, 0.1 KB) [[attachment:2013-02-01.dumb_solver.py]]
- [получить | показать] (2013-02-08 11:25:57, 1.2 KB) [[attachment:2013-02-01.lab_shell.py]]
- [получить | показать] (2013-02-01 17:42:41, 0.5 KB) [[attachment:2013-02-01.pyexec.py]]
- [получить | показать] (2013-02-08 11:21:15, 1.7 KB) [[attachment:2013-02-01.univ_shell.py]]
Вам нельзя прикреплять файлы к этой странице.