2015-01-22 2 views
0

에 발신자에서 라이브러리의 printf와 출력을 캡처.내가 OCaml의-DNS를 사용하고 OCaml의

Here 당신은

printf "retrying query for %d times\n%!" (4-count); 

을 볼 수 있으며 내 로그를 어지럽히고있다! 나는 이미 실패를 다루고 있으며, 나는 그 결과를 신경 쓰지 않고 침묵하고 싶다. 라이브러리 자체를 수정하고 수정하지 않고 어떻게 할 수 있습니까? 어떻게 든 출력을 버퍼링 할 수 있습니까?

감사

+2

운이 없습니다. 명시 적으로 말하면 라이브러리는 표준 파일 디스크립터로 절대 출력해서는 안된다. 나는 [여기] (https://github.com/mirage/ocaml-dns/issues/36) 버그 보고서를 제출했다. –

답변

1

당신이 유닉스 시스템에 있다면 당신은 표준 출력 "을/dev/null"로 리디렉션 할 수 있습니다. 이런 식으로 뭔가를 작동 할 수 있습니다 : 당신이 다른 시간에 표준 출력을 사용해야하는 경우

$ 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 

, 당신은이 : 여기

let nullout = open_out "/dev/null" in 
Unix.dup2 (Unix.descr_of_out_channel nullout) Unix.stdout 

그것 (OS의 X에 적어도 나를 위해) 작동하는지 보여주는 세션의 더 나쁜 문제. 당신은의 여분의 사용과 함께 이전의 상태로 stdout을 리디렉션 할 수 있다고 생각합니다.

+0

팁이'dup'을 사용해 주셔서 감사합니다.하지만 불행히도 stdout에 내 물건을 쓸 수 있어야합니다. 단지 그 시끄러운 라이브러리를 침묵시키고 싶습니다. Daniel Bünzli가 내 질문에 댓글을 달고 Github에 버그를 제출했으며 작성자는 문제를 해결할 것이라고 말했습니다. – SGr

+1

''dup'으로 매우 열정적으로 활동하고 싶다면 잘 할 수있을 것이라고 확신합니다. 그러나 버그를 수정하는 것이 훨씬 우수합니다. –

+0

예, 모든 호출 전에 null로 리디렉션 한 다음 바로 정상 출력으로 되돌릴 수 있습니다. 나는 성능에 너무 많은 영향을 미치지 않는다면 그렇게 할 수도 있습니다. – SGr