我已经创建了一个使用自定义构建类型的cabal包。在Setup.hs中,我触发了一个postCopy钩子,我打算用它来做一些IO。在触发器的主体中,我使用putStrLn输出一行。
当我cabal install包时,输出会记录到一个文本文件中,而不是显示在控制台上。更深入一点:我认为这个问题与所有触发器有关,而不仅仅是postCopy和cabal install。因为例如,如果我有一个postConf触发器(执行一些IO)并运行cabal configure,IO将按预期工作。但是,当我执行cabal install时,postConf触发器也会遇到同样的问题。
有没有办法在stdout中显示触发器的输出?
>cabal --version
cabal-install version 1.22.6.0
using version 1.22.5.0 of the Cabal library发布于 2016-06-14 22:26:07
据我所知,在安装过程中,cabal使用标准输出和标准错误重定向到一个文件来运行Setup.hs。这有两个原因:
您可以使用--build-log选项告诉cabal将日志记录信息写入何处,例如:
cabal install --build-log /tmp/foo此外,如果您运行的是Unix/Linux之类的系统,则可以写入/dev/tty之类的设备,并将输出返回到用户的终端(如果有)。例如:
import Distribution.Simple
import System.IO
main = do
putStrLn "=== I am here in Setup.hs"
withFile "/dev/tty" AppendMode $ \h -> do
hPutStrLn h "--- writing to /dev/tty"
defaultMain当然,这是特定于操作系统的代码,如果其他用户使用的是与您不同的操作系统,则可能会给他们带来问题。
发布于 2016-06-15 04:27:51
如果您显式地请求单线程构建,那么cabal会将其输出发送到stdout。使用
cabal install -j1才能提出这个请求。
https://stackoverflow.com/questions/37809030
复制相似问题