Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.