运行 个可执行文件使用 Haskell

Running executable files using Haskell

假设有一个 C++ 代码,我使用以下方法编译成可执行文件:

g++ test.cpp -o testcpp

我可以 运行 使用终端(我正在使用 OS X),并提供一个输入文件用于在 C++ 程序内部进行处理,例如:

./testcpp < input.txt

我想知道这样做是否可行,来自 Haskell。我听说过 System.Process 模块中的 readProcess 函数。但这只允许 运行ning 系统 shell 命令。

这样做:

out <- readProcess "testcpp" [] "test.in"

或:

out <- readProcess "testcpp < test.in" [] ""

或:

out <- readProcess "./testcpp < test.in" [] ""

抛出此错误(或非常相似的错误,具体取决于我使用的是上面的哪一个):

testcpp: readProcess: runInteractiveProcess: exec: does not exist (No such file or directory)

所以我的问题是,是否可以从 Haskell 开始这样做。如果是这样,我应该如何使用以及使用哪个 modules/functions?谢谢。

编辑

好的,正如 David 所建议的那样,我删除了输入参数并尝试了 运行ning。这样做有效:

out <- readProcess "./testcpp" [] ""

但我仍然坚持提供意见。

documentation for readProcess 说:

readProcess
  :: FilePath   Filename of the executable (see RawCommand for details)
  -> [String]   any arguments
  -> String     standard input
  -> IO String  stdout

当它请求 standard input 时,它不是请求从中读取输入的文件,而是文件标准输入的实际内容。

所以你需要使用readFile之类的东西来得到test.in的内容:

input <- readFile "test.in"
out <- readProcess "./testcpp" [] input