最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Erlang中執(zhí)行l(wèi)inux命令的兩種方法

 更新時(shí)間:2015年01月07日 10:51:03   投稿:junjie  
這篇文章主要介紹了Erlang中執(zhí)行l(wèi)inux命令的兩種方法,本文著重講解了erlang:open_port的使用,需要的朋友可以參考下

os.cmd(Cmd)

os模塊提供了cmd函數(shù)可以執(zhí)行l(wèi)inux系統(tǒng)shell命令(也可以執(zhí)行windows命令)。返回一個(gè)Cmd命令的標(biāo)準(zhǔn)輸出字符串結(jié)果。例如在linux系統(tǒng)中執(zhí)行os:cmd("date"). 返回linux的時(shí)間。 這種比較簡(jiǎn)單,一般情況下,也滿(mǎn)足了大部分需求。

erlang:open_port(PortName, PortSettings)

當(dāng)os.cmd(Cmd) 滿(mǎn)足不了你的需求的時(shí)候,就可以用強(qiáng)大的open_port(PortName, PortSettings) 來(lái)解決了。最簡(jiǎn)單的需求,我要執(zhí)行一個(gè)linux命令,而且還需要返回退出碼。os.cmd(Cmd) 就有些捉急了。也不要以為有了open_port(PortName, PortSettings) 就可以完全替代os.com(Cmd) 了。強(qiáng)大是需要代價(jià)的。

%% 優(yōu)點(diǎn):可以返回exit status 和執(zhí)行過(guò)程
%% 缺點(diǎn): 非常影響性能, open_port執(zhí)行的時(shí)候,beam.smp會(huì)阻塞

當(dāng)對(duì)本身系統(tǒng)的性能要求比較高的時(shí)候,不建議使用erlang:open_port(PortName, PortSettings) .

下面是一段很好用的代碼,返回exit status 和執(zhí)行結(jié)果。

復(fù)制代碼 代碼如下:

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.

相關(guān)文章

最新評(píng)論

任丘市| 三门县| 乡城县| 天津市| 筠连县| 隆林| 荔浦县| 揭阳市| 安徽省| 云林县| 新宾| 老河口市| 塔城市| 根河市| 辉南县| 鄂伦春自治旗| 博野县| 东乡| 阜新| 太保市| 内江市| 泾川县| 深水埗区| 阿拉善盟| 中卫市| 图木舒克市| 翼城县| 永春县| 盖州市| 盐源县| 新密市| 延边| 铜陵市| 柳江县| 金塔县| 陆丰市| 石渠县| 武定县| 汕头市| 巧家县| 孟连|