Перенаправить стандартный вывод, полученный при вызове функции C от Julia с помощью ccall - PullRequest
1 голос
/ 28 мая 2019

Я делаю обертку Julia для библиотеки C / C ++. Функции C / C ++, которые я упаковываю, записывают в стандартный вывод. Есть ли способ перенаправить эти сообщения со стороны Юлии, не комментируя / не удаляя операторы записи из кода C / C ++?

1 Ответ

2 голосов
/ 29 мая 2019

Для этого вы можете использовать redirect_stdout.

oldstd = stdout
redirect_stdout(somewhere_else)
ccall(:printf, Cint, (Cstring,), "Hello World!")
Base.Libc.flush_cstdio() # it might be necessary to flush C stdio to maintain the correct order of outputs or forcing a flush
redirect_stdout(oldstd) # recover original stdout

Вместо этого вы можете использовать метод redirect_stdout(f::Function, stream).Здесь f должна быть функцией без параметров (например, () -> do_something(...)).Этот метод автоматически восстанавливает поток до stdout.Использование синтаксиса do;

redirect_stdout(somewhere) do
    ccall(:printf, Cint, (Cstring,), "Hello World!")
    Base.Libc.flush_cstdio() # might be needed
end
...