gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Erlang中执行linux命令的两种方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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.com(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. 。

  。

最后此篇关于Erlang中执行linux命令的两种方法的文章就讲到这里了,如果你想了解更多关于Erlang中执行linux命令的两种方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com