校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Erlang中執行linux命令的兩種方法

Erlang中執行linux命令的兩種方法

熱門標簽:萬利達綜合醫院地圖標注點 股票配資電銷機器人 實體店地圖標注怎么標 地圖標注如何弄全套標 電銷機器人 深圳 南京電銷外呼系統哪家好 外呼系統會封嗎 武漢AI電銷機器人 在電子版地圖標注要收費嗎

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,命令,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Erlang中執行linux命令的兩種方法》相關的同類信息!
  • 本頁收集關于Erlang中執行linux命令的兩種方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 沅陵县| 巍山| 三原县| 衡阳县| 金乡县| 玉田县| 康乐县| 密云县| 武城县| 三台县| 屏东市| 南和县| 台湾省| 望奎县| 佛学| 理塘县| 博湖县| 北京市| 子洲县| 克东县| 呼和浩特市| 榕江县| 大方县| 神池县| 威海市| 新竹县| 肇州县| 东辽县| 博湖县| 金昌市| 宜城市| 白城市| 云和县| 滁州市| 筠连县| 衡阳县| 明溪县| 鹤庆县| 彩票| 满洲里市| 井研县|