2015-04-08 3 views
0

Я работаю с OCaml и должен начать новый процесс и общаюсь с ним.В OCaml, как получить строку stdout из подпроцесса?

  1. Если подпроцесс завершается, как только это называется и произвел некоторый вывод, то, как получить строки в это стандартный вывод?

  2. Что делать, если подпроцесс никогда не заканчивается? То есть, каждый раз, когда задана строка для stdin, она приведет к результату в stdout, как получить результат?

+0

Возможный дубликат [Сбор вывода внешней команды с помощью OCaml] (https://stackoverflow.com/questions/2214970/collecting-the-output-of-an-external-command-using-ocaml) – ymyzk

ответ

0

Unix.open_process_in функция. Он вызовет процесс и вернет входной канал, который позволит вам читать данные из процесса.

Если вы хотите ждать процесса прекратить, вы можете просто прочитать все данные (то есть, подождите, пока процесс труба не возвращает EOF), а затем закрыть канал, например,

(* [run cmd] runs a shell command, waits until it terminates, and 
    returns a list of strings that the process outputed *) 
let run cmd = 
    let inp = Unix.open_process_in cmd in 
    let r = In_channel.input_lines inp in 
    In_channel.close inp; r 

Рабочих с процессом без конца еще проще.

Вы также можете найти интересную библиотеку lwt, которая имеет очень спускный интерфейс для многопроцессорной обработки. Асинхронная библиотека - это еще одна асинхронная библиотека, обеспечивающая превосходный интерфейс для многопроцессорности. Хотя, эти библиотеки замечательные, они немного продвинуты, для простых случаев достаточно стандартного модуля Unix.

Смежные вопросы