Erlang中执行linux命令的两种方法

编程入门 行业动态 更新时间:2024-10-28 00:23:10

os.cmd(cmd)

os模块提供了cmd函数可以执行linux系统shell命令(也可以执行windows命令)。返回一个cmd命令的标准输出字符串结果。例如在linux系统中执行os:cmd("date"). 返回linux的时间。 这种比较简单,一般情况下,也满足了大部分需求。

erlang:open_port(portname, portsettings)

当os.cmd(cmd) 满足不了你的需求的时候,就可以用强大的open_port(portname, portsettings) 来解决了。最简单的需求,我要执行一个linux命令,而且还需要返回退出码。os.cmd(cmd) 就有些捉急了。也不要以为有了open_port(portname, portsettings) 就可以完全替代os(cmd) 了。强大是需要代价的。

%% 优点:可以返回exit status 和执行过程%% 缺点: 非常影响性能, open_port执行的时候,beam.smp会阻塞

当对本身系统的性能要求比较高的时候,不建议使用erlang:open_port(portname, portsettings) .

下面是一段很好用的代码,返回exit status 和执行结果。

my_exec(command) -> port = open_port({spawn, command}, [stream, in, eof, hide, exit_status]), result = get_data(port, []), result.

get_data(port, sofar) -> receive {port, {data, bytes}} -> get_data(port, [sofar|bytes]); {port, eof} -> port ! {self(), close}, receive {port, closed} -> true end, receive {'exit', port, _} -> ok after 1 -> % force context switch ok end, exitcode = receive {port, {exit_status, code}} -> code end, {exitcode, lists:flatten(sofar)} end.

  • 0
  • 0
  • 0
  • 0
  • 0

更多推荐

Erlang中执行linux命令的两种方法

本文发布于:2023-06-11 03:38:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/625895.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两种   命令   方法   Erlang   linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!