问题
我希望用Erlang调用其他任意(可以在命令行访问的)程序,例如调用make或者ant,得到退出值(0或者非0),并且可以从STDOUT和/或STDERR解析我期望的特定字符串。
我尝试用os:cmd来调用,但存在问题:(1)不知道如何得到退出值;(2)只能得到STDOUT,不知道如何得到STDERR。
似乎可以用C node或者Jinterface,把这块功能放到C或者Java去实现,但感觉比较麻烦。
请问各位有没有好的办法?
解答
jacky zhao:
可考虑使用:open_port({spawn, "make"}, [exit_status, stderr_to_stdout]) ,其中:exit_status 属性可以捕获退出状态,stderr_to_stdout 属性能将 stderr 重定向到 stdout 中。感觉应该够用。具体用法可参照 erlang:open_port 的文档。
如果这个方法不能满足功能要求,你还可以用 C 来构建一个"外部任务执行器",并通过 port 的方式走自定义的"协议"去操控它的执行。