Тайм-аут подпроцесса не работает

У меня есть несколько ошибок в программах OCaml в строках, и я использую подпроцесс Python для проверки обратной связи от компилятора. Однако, поскольку некоторые программы содержат бесконечные циклы, подпроцесс застрял, даже если я установил поле тайм-аута.

Среда: Windows 10, Python 3.5.1

Это код, который я пробовал:

annotated_prog = "let rec ww : ('a -> 'a * bool) * 'a -> 'a = fun (f,b)  ->  let (b',c') = f b in if c' then ww (f, b') else b';;\n let _ = let f x = let xx = (x * x) * x in (xx, (xx < 100)) in ww (f, 1);;"

try:
error_output = subprocess.run(["ocaml"], input = annotated_prog, 
                         stdout=subprocess.PIPE,universal_newlines = True, timeout=1)

except TimeoutExpired:
  error_output = None

Тем не менее, код все еще идет в бесконечный цикл и не может работать.

Еще один способ, которым я пытался:

def run(cmd, timeout_sec):
  proc = subprocess.Popen(["ocaml"], stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE,universal_newlines = True)
  proc.communicate(timeout = timeout_sec)       
  print(proc.communicate("let a = b;;\n")[0])

Это даже не дает правильного вывода:

что я ожидаю: символы 8-9: ошибка: несвязанное значение b

что я получил: OCaml версия 4.02.3

Таким образом, как я могу получить правильный вывод из Python?

def run(timeout_sec):
  proc = subprocess.Popen(["python"], stdout=subprocess.PIPE, 
  stderr=subprocess.PIPE,universal_newlines = True)
  print(cmd)
  print(proc.communicate("while True: print('hello')\n", timeout = timeout_sec)[0])

try:
      error_output =run(1)
except subprocess.TimeoutExpired:
      print('timeout')

print('error_output')

То, что я ожидаю: «время ожидания» с или без связки приветов Что я получил: нет

Ответы на вопрос(0)

Ваш ответ на вопрос