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命令
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- dnf最高等级
- 《蟹蟹寻宝奇遇》评测:小蟹寻家记
- 《剑星》评测:油腻师姐炒的功夫菜,欠点火候
- 杉果福袋¥35.8抽《庄园领主》《地狱潜兵2》
- Bruckner-SymphoniesNos.56-NewPhilharmoniaOrchestra,OttoKlemperer(2024)[24-192]FLA
- 群星《梦舞池3》WAV分轨
- 黄凤凤.2011-丽风金典系列VOL.1【丽风】2cd【WAV+CUE】
- 大部分情侣是食色性也的酒肉情侣 3D区X光片的囧图
- 《崩坏:星穹铁道》迎一周年!登陆游戏送10连抽
- 布兰妮与父亲达成和解:需向父亲支付200多万法律费
- Taylor Swift霉霉《THE TORTURED POETS DEPARTMENT THE ANTHOLOGY》[FLAC][766M]
- 潘美辰《金歌点唱 HDCD 》[WAV+CUE][603M]
- 久石让 《你想活出怎样的人生》原声带[FLAC][314M]
- 【原神】枫丹V4.6世界任务 | 第三章·法沙利亚狂想曲
- 【原神】1.0~4.6开服至今「全隐藏成就」统计汇总