Если вы на Unix-подобных системах вы можете перенаправить стандартный вывод «/ DEV/нуль». Нечто подобное может работать:
let nullout = open_out "/dev/null" in
Unix.dup2 (Unix.descr_of_out_channel nullout) Unix.stdout
Вот сессия, показывая, что он работает (по крайней мере для меня на OS X):
$ ocaml
OCaml version 4.01.0
# #load "unix.cma";;
# Sys.system "echo unwanted message";;
Error: Unbound value Sys.system
# Sys.command "echo unwanted message";;
unwanted message
- : int = 0
# let nullout = open_out "/dev/null" in
Unix.dup2 (Unix.descr_of_out_channel nullout) Unix.stdout;;
Sys.command "echo unwanted message";;
Sys.command "echo error message >&2";;
error message
Если вам необходимо использовать стандартный вывод в другое время, у вас есть хуже. Я думаю, вы можете перенаправить stdout обратно туда, где он был раньше, с некоторыми дополнительными видами использования dup
.
Вам не повезло. Библиотеки никогда не должны выводиться в стандартные дескрипторы файлов, за исключением случаев, когда это прямо сказано. Я подал сообщение об ошибке [здесь] (https://github.com/mirage/ocaml-dns/issues/36). –