我有一个shell命令行,我想在Haskell中使用,例如:
grep -n "358" cameraTest.owl
我已经在ghci上试过了:
readProcess "grep" ["-n","358"] "cameraTest.owl"
但它不起作用。
我如何处理Haskell中的函数readProcess
?
获取错误
Prelude System.Process> readProcess "grep" ["-n","358"] "cameraTest.owl"
*** Exception: readProcess: grep "-n" "358" (exit 1): failed
答案 0 :(得分:2)
根据documentation,readProcess
的第三个参数是表示标准输入的字符串。但在您的情况下,您似乎在贪图文件,因此不需要标准输入。只需将文件名作为列表中的另一个参数传递。
像这样:
readProcess "grep" ["-n","358","cameraTest.owl"] ""
但是,调用grep
还有另一个问题。当没有找到行时,Linux中的grep
返回non-zero exit code。但是readProcess
将任何非零退出代码解释为错误并抛出异常,这可能不是您想要的行为。
因此,一种解决方案是依赖于低级createProcess
函数,该函数在退出代码非零时不会抛出异常。但是在这种情况下,您必须编写代码来自己读取进程“stdout
。
编辑,您也可以使用readProcessWithExitCode
。我忘了这个功能。