[使用sbt构建凿子时,如何关闭进度条等,以便输出是干净的?

问题描述 投票:0回答:1

[使用sbt构建凿子时,作为批处理运行时,如何关闭进度条等,以使输出像大多数编译器一样干净?

也就是说,我喜欢在makefile中使用sbt构建凿子,如下所示:

${VLOG_DIR}/${NAME}.v: ${NAME}.scala
        setsid sbt \
          'runMain ${NAME}.${NAME} --top-name ${NAME} --target-dir ${VLOG_DIR}'

但是sbt / scala / chisel喜欢在构建时尝试生成某种进度条,该进度条发出终端转义码以尝试在适当位置更新输出。当在我的shell中运行时,效果不佳,但是在emacs中运行时,则造成很大的混乱:

make
setsid sbt \
  'runMain HelloWorld.HelloWorld --top-name HelloWorld --target-dir Gen_HelloWor\
ld.verilog_dir'
^[[0m[^[[0m^[[0minfo^[[0m] ^[[0m^[[0mLoading project definition from /home/user/h\
ello-chisel/project^[[0m
^[[2K
^[[2K
^[[2K
^[[2K
^[[2K
^[[5A^[[2K
^[[2K
^[[2K
^[[2K
^[[2K
^[[2K  | => hello-chisel-build / update 0s
^[[6A^[[2K
^[[2K

尤其是出现错误消息时:

^[[2K
^[[2K
^[[2K  | => hello-chisel / Compile / compileIncremental 1s
^[[6A^[[2K^[[0m[^[[0m^[[31merror^[[0m] ^[[0m^[[0m/home/user/hello-chisel/HelloWor\
ld.scala:46:17: overloaded method value apply with alternatives:^[[0m
^[[2K

如何关闭所有功能,并获得正常的输出以及干净的错误消息?

scala sbt chisel
1个回答
0
投票

简短回答

-no-colors传递到sbtsbt FAQ

$ sbt -no-colors 'test:runMain gcd.GCDMain'

尽管名称为“ no colors”,但它会禁止所有终端转义内容,包括进度条。

其他替代方法

该选项也可以拼写为--no-colors(两个连字符),这是它在sbt --help(和sbt -help)的输出中的显示方式。

-Dsbt.log.noformat=true中所示,通过将sbt传递到java(或直接调用this answer,则传递到$ sbt -Dsbt.log.noformat=true 'test:runMain gcd.GCDMain' 可以达到相同的效果:

JAVA_OPTS

也可以通过将-Dsbt.log.noformat=true环境变量设置为$ JAVA_OPTS=-Dsbt.log.noformat=true sbt 'test:runMain gcd.GCDMain'

sbt

最后,当$ sbt 'test:runMain gcd.GCDMain' | cat
检测到其标准输出不是TTY时,它将抑制颜色输出:

sbt

尽管在Makefile中,这不是一个好选择,因为您丢失了shenanigans的退出状态(不再有sbt)。

不幸的是,NO_COLOR确实

不是尊重NO_COLOR

凿子输出仍然有一些颜色

[使用Chisel,例如chisel template时,即使使用-no-colors,总会有一些终端转义码出现在输出中:

$ sbt -no-colors 'test:runMain gcd.GCDMain' | cat -tev [info] Loading settings for project chisel-template-build from plugins.sbt ...$ [info] Loading project definition from /home/scott/wrk/learn/chisel/chisel-template/project$ [info] Loading settings for project chisel-template from build.sbt ...$ [info] Set current project to chisel-module-template (in build file:/home/scott/wrk/learn/chisel/chisel-template/)$ [warn] Multiple main classes detected. Run 'show discoveredMainClasses' to see the list$ [info] running gcd.GCDMain $ [^[[35minfo^[[0m] [0.001] Elaborating design...$ [^[[35minfo^[[0m] [1.064] Done elaborating.$ Total FIRRTL Compile Time: 512.0 ms$ file loaded in 0.114380184 seconds, 22 symbols, 17 statements$ [^[[35minfo^[[0m] [0.001] SEED 1581769687441$ test GCD Success: 168 tests passed in 1107 cycles in 0.047873 seconds 23123.91 Hz$ [^[[35minfo^[[0m] [0.037] RAN 1102 CYCLES PASSED$ [success] Total time: 3 s, completed Feb 15, 2020 4:28:09 AM$

注意[^[[35minfo^[[0m]输出接近尾声。发生这种情况是因为chiselFrontend/src/main/scala/chisel3/internal/Error.scala无条件地打印了颜色转义序列(请参阅tag函数),这在Chisel中可以说是一个错误,因为它的输出显然看起来类似于sbt输出。

setid的作用

在您的示例Makefile中,您正在通过sbt调用setsid。据我所知,我所说的一切都同样适用于这种情况。但是,您可能希望将setsid传递给--wait,因此它将在退出之前等待setsid完成。在我的测试中,sbt仅在stdout不是TTY时才隐式等待,但我怀疑您实际上是否想要该隐藏的可变性。

© www.soinside.com 2019 - 2024. All rights reserved.