haskell - 将系统命令的结果绑定(bind)到 Haskell 中的变量

标签 haskell system

如何在 Haskell 中运行系统命令 将其结果(即标准输出)绑定(bind)到变量?在伪haskell中,我正在寻找类似以下的内容:

import System.Process

main = do output <- callCommand "echo hi"
          putStrLn output -- result: "hi"

这不起作用。有没有类似的东西?

最佳答案

这是一些工作代码:

import System.Process

main :: IO ()
main = do
  let stdin' = ""
  (errCode, stdout', stderr') <- readProcessWithExitCode "echo" ["hi"] stdin'
  putStrLn $ "stdout: " ++ stdout'
  putStrLn $ "stderr: " ++ stderr'
  putStrLn $ "errCode: " ++ show errCode

正如 Carsten 所指出的,您可以使用 readProcess,但我更喜欢这个版本,因为任何严重的使用,您很快就会对为什么您的命令静默失败感到非常困惑(如果您在命令行中运行,stdout 和 stderr 都是当然,如图所示)。

关于haskell - 将系统命令的结果绑定(bind)到 Haskell 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107934/

相关文章:

php - 从 C++ 程序调用 PHP 脚本

system - MarkLogic Server 中的坐标系

android - 有什么方法可以增加 Android 系统日志文件的大小?

android - 显示系统面板时回调到 Android 应用程序

c - Haskell FFI - 如何处理接受或返回结构而不是指向结构的指针的 C 函数?

haskell - Cabal install ghc-mod 提示损坏的软件包 (GHC 7.6.3)

haskell - 使用镜头两次

python - 通过 C++ 调用系统不一致失败

haskell - 为什么这会打败 Haskell 的懒惰评估?

haskell - 如何处理链式 IO 中间的错误?