如何从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

Subscription expired — please renew

Pro account upgrade has expired for this site and the site is now locked. If you are the master administrator for this site, please renew your subscription or delete your outstanding sites or stored files, so that your account fits in the free plan.