【问题标题】:Suppress deprecation warnings in Julia 0.6 without using `--depwarn=no` or a package在不使用 `--depwarn=no` 或包的情况下抑制 Julia 0.6 中的弃用警告
【发布时间】:2018-02-12 21:29:10
【问题描述】:

我正在 Julia 中编写一个工具,该工具需要一个包含已弃用函数的包。

我的脚本是从命令行调用的,并且需要很多参数,所以我想避免使用--depwarn=no 来抑制弃用警告。

相反,我想将这个--depwarn=no 嵌入到我的脚本中,这样用户就不必输入它,或者在运行脚本时担心它。

有谁知道我如何只使用 Base Julia 而不安装任何其他软件包(如 Suppressor.jl)来做到这一点?

【问题讨论】:

  • 这是一个问题,而且非常直接。我不知道为什么一群不属于 Julia 社区的人会搁置这件事,但这是非常无礼的。
  • 欢迎加入the Gitter channelthe Julia Slack 提出这个问题并获得更多答案。很抱歉,这件事发生在你身上。
  • @ChrisRackauckas 发生这种情况时,我们可以编辑问题以改进一点(例如格式化),然后(如果有足够的声誉)投票 reopen。至于为什么搁置,也许只是为了刷 SO 徽章? ¯\_(ツ)_/¯
  • @ChrisRackauckas 感谢您邀请我加入 Julia Slack,我已申请加入。 Gitter 频道看起来也非常有用,我很高兴看到有我可以参与的活跃支持频道!

标签: julia


【解决方案1】:

我最初写了 Suppressor,据我所知目前没有其他方法,which is why I started Suppressor

您可以随时将您需要的 suppress* 宏逐字复制粘贴到您的代码中(但我建议诚实地使用 Suppressor,以防更新),所有 Suppressor 宏都是自包含的,只需要 Base (如果您使用的是 0.6.x,则此宏不需要 Compat)。

"""
    @suppress_err expr

Suppress the STDERR stream for the given expression.
"""
macro suppress_err(block)
    quote
        if ccall(:jl_generating_output, Cint, ()) == 0
            ORIGINAL_STDERR = STDERR
            err_rd, err_wr = redirect_stderr()
            err_reader = @async read(err_rd, String)
        end

        value = $(esc(block))

        if ccall(:jl_generating_output, Cint, ()) == 0
            redirect_stderr(ORIGINAL_STDERR)
            close(err_wr)
        end

        value
    end
end

如果您只是想摆脱弃用警告,那么@suppress_err 就是您所需要的。当前的 Julia master 分支最近在与日志记录相关的方面有所改进,但我还没有检查过。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多