运行 个可执行文件使用 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
假设有一个 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