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

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

 更新時間: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命令)。返回一個Cmd命令的標(biāo)準(zhǔn)輸出字符串結(jié)果。例如在linux系統(tǒng)中執(zhí)行os:cmd("date"). 返回linux的時間。 這種比較簡單,一般情況下,也滿足了大部分需求。

erlang:open_port(PortName, PortSettings)

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

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

當(dāng)對本身系統(tǒng)的性能要求比較高的時候,不建議使用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)文章

最新評論

铜梁县| 南木林县| 拜泉县| 双辽市| 余姚市| 阿尔山市| 成都市| 吉首市| 宾川县| 白玉县| 英德市| 宜宾县| 呼玛县| 黄龙县| 阿巴嘎旗| 德格县| 鄂托克前旗| 武宣县| 海南省| 沅陵县| 嘉义市| 禄丰县| 石门县| 金溪县| 陇南市| 若尔盖县| 木兰县| 永兴县| 兰坪| 错那县| 泊头市| 原阳县| 南皮县| 宁化县| 惠州市| 黎平县| 台南县| 潢川县| 平谷区| 宝清县| 肇源县|