首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cabal install禁止输出

cabal install禁止输出
EN

Stack Overflow用户
提问于 2016-06-14 18:09:13
回答 2查看 58关注 0票数 1

我已经创建了一个使用自定义构建类型的cabal包。在Setup.hs中,我触发了一个postCopy钩子,我打算用它来做一些IO。在触发器的主体中,我使用putStrLn输出一行。

当我cabal install包时,输出会记录到一个文本文件中,而不是显示在控制台上。更深入一点:我认为这个问题与所有触发器有关,而不仅仅是postCopycabal install。因为例如,如果我有一个postConf触发器(执行一些IO)并运行cabal configure,IO将按预期工作。但是,当我执行cabal install时,postConf触发器也会遇到同样的问题。

有没有办法在stdout中显示触发器的输出?

代码语言:javascript
复制
>cabal --version
cabal-install version 1.22.6.0
using version 1.22.5.0 of the Cabal library
EN

回答 2

Stack Overflow用户

发布于 2016-06-14 22:26:07

据我所知,在安装过程中,cabal使用标准输出和标准错误重定向到一个文件来运行Setup.hs。这有两个原因:

  1. 将安装输出保存在~/.cabal/logs/...directory
  2. ,因此它可以运行并行安装,并且并发作业的输出不会相互混淆

您可以使用--build-log选项告诉cabal将日志记录信息写入何处,例如:

代码语言:javascript
复制
cabal install --build-log /tmp/foo

此外,如果您运行的是Unix/Linux之类的系统,则可以写入/dev/tty之类的设备,并将输出返回到用户的终端(如果有)。例如:

代码语言:javascript
复制
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

当然,这是特定于操作系统的代码,如果其他用户使用的是与您不同的操作系统,则可能会给他们带来问题。

票数 2
EN

Stack Overflow用户

发布于 2016-06-15 04:27:51

如果您显式地请求单线程构建,那么cabal会将其输出发送到stdout。使用

代码语言:javascript
复制
cabal install -j1

才能提出这个请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37809030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档