使用hint库执行runStmt时重定向无输出的技术问题
问题:hint库解释器内的print输出无法被重定向捕获
运行以下Haskell模块:
module Main where import Language.Haskell.Interpreter main :: IO () main = do _ <- runInterpreter $ setImports ["Prelude"] >> runStmt "x <- pure 42" >> runStmt "print x" return ()
执行命令 stack run > 42.txt 进行输出重定向时,42.txt文件中无任何内容。
经分析,这是因为hint库的解释器内部运行的print操作,其输出是通过管道传输的,并非直接使用主进程的标准输出,和常规主模块中调用print的情况不同。
以下是进程文件描述符的查看结果(ls -l /proc/<pid>/fd):
lrwx------ 1 user user 64 31 mei 20:50 0 -> /dev/pts/4 lrwx------ 1 user user 64 31 mei 20:50 1 -> /dev/pts/4 lrwx------ 1 user user 64 31 mei 20:50 2 -> /dev/pts/4 lrwx------ 1 user user 64 31 mei 20:50 3 -> 'anon_inode:[timerfd]' lr-x------ 1 user user 64 31 mei 20:50 4 -> 'pipe:[2705380]' lr-x------ 1 user user 64 31 mei 20:50 6 -> 'pipe:[2705381]'
内容的提问来源于stack exchange,提问作者sjb
相关产品推荐
相关产品推荐

