欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)單,一般情況下,也滿足了大部分需求。

erlang:open_port(PortName, PortSettings)

當(dāng)os.cmd(Cmd) 滿足不了你的需求的時(shí)候,就可以用強(qiáng)大的open_port(PortName, PortSettings) 來解決了。最簡(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í)行過程
%% 缺點(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)文章

  • Erlang語法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串

    Erlang語法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串

    這篇文章主要介紹了Erlang語法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串,本文簡(jiǎn)明總結(jié)了這5種類型的相關(guān)知識(shí),需要的朋友可以參考下
    2015-01-01
  • Erlang中執(zhí)行l(wèi)inux命令的兩種方法

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

    這篇文章主要介紹了Erlang中執(zhí)行l(wèi)inux命令的兩種方法,本文著重講解了erlang:open_port的使用,需要的朋友可以參考下
    2015-01-01
  • CentOS 6.5源碼安裝Erlang教程

    CentOS 6.5源碼安裝Erlang教程

    這篇文章主要介紹了CentOS 6.5源碼安裝Erlang教程,本文講解了源碼編譯安裝的過程和遇到的一些錯(cuò)誤處理方法,需要的朋友可以參考下
    2015-01-01
  • Erlang IO編程之文件目錄操作常用方法小結(jié)

    Erlang IO編程之文件目錄操作常用方法小結(jié)

    這篇文章主要介紹了Erlang IO編程之文件目錄操作常用方法小結(jié),本文講解了常用的文件操作如打開文件、讀取文件、寫入文件、刪除文件等,需要的朋友可以參考下
    2015-01-01
  • Erlang的一些編程技巧分享

    Erlang的一些編程技巧分享

    這篇文章主要介紹了Erlang的一些編程技巧分享,本文是是實(shí)際編程中的個(gè)人總結(jié),需要的朋友可以參考下
    2015-01-01
  • Erlang中遍歷取出某個(gè)位置的最大值代碼

    Erlang中遍歷取出某個(gè)位置的最大值代碼

    這篇文章主要介紹了Erlang中遍歷取出某個(gè)位置的最大值代碼,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • Erlang中的socket編程簡(jiǎn)單例子

    Erlang中的socket編程簡(jiǎn)單例子

    這篇文章主要介紹了Erlang中的socket編程簡(jiǎn)單例子,本文給出了TCP服務(wù)器echo示例、Tcp 的echo客戶端示例、UDP server示例、UDP client 示例,需要的朋友可以參考下
    2015-03-03
  • Erlang中的模塊與模式匹配介紹

    Erlang中的模塊與模式匹配介紹

    這篇文章主要介紹了Erlang中的模塊與模式匹配介紹,本文分別對(duì)模塊與模式匹配做了講解,需要的朋友可以參考下
    2015-03-03
  • 一篇文章帶你從入門到精通:RabbitMQ

    一篇文章帶你從入門到精通:RabbitMQ

    RabbitMQ是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務(wù)器是用Erlang語言編寫的,所有主要的編程語言均有與代理接口通訊的客戶端庫
    2021-06-06
  • Erlang并發(fā)編程介紹

    Erlang并發(fā)編程介紹

    這篇文章主要介紹了Erlang并發(fā)編程介紹,本文講解了進(jìn)程的創(chuàng)建 、進(jìn)程間通信、超時(shí)設(shè)置以及給出代碼實(shí)例,需要的朋友可以參考下
    2015-01-01

最新評(píng)論