如何从Erlang调用其他程序?
Table of Contents

问题

我希望用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 的方式走自定义的"协议"去操控它的执行。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License