Elixir語言中 System.cmd
相關用法介紹如下。
用法:
cmd(command, args, opts \\ [])
@spec cmd(
binary(),
[binary()],
keyword()
) :: {Collectable.t(), exit_status :: non_neg_integer()}
使用 args
執行給定的 command
。
command
應該是 PATH 中可用的可執行文件,除非給出絕對路徑。
args
必須是可執行文件將按原樣作為其參數接收的二進製文件列表。這意味著:
- 環境變量不會被插值
- 不會發生通配符擴展(除非明確使用
Path.wildcard/2
- 為了 shell 安全,不需要對參數進行轉義或引用
該函數返回一個包含收集結果和命令退出狀態的元組。
在內部,此函數使用
與外界交互。但是,如果您計劃運行long-running 程序,端口保證標準輸入/標準輸出設備將被關閉,但它不會自動終止程序。 Port
模塊的文檔在"Zombie processes" 部分說明了這個問題和可能的解決方案。Port
例子
iex> System.cmd("echo", ["hello"])
{"hello\n", 0}
iex> System.cmd("echo", ["hello"], env: [{"MIX_ENV", "test"}])
{"hello\n", 0}
如果您想在輸出到達時將輸出流式傳輸到標準 IO:
iex> System.cmd("echo", ["hello"], into: IO.stream())
hello
{%IO.Stream{}, 0}
選項
:into
- 將結果注入給定的收藏品,默認為""
:cd
- 運行命令的目錄:env
- 包含環境鍵值作為二進製的元組的可枚舉。子進程從其父進程 Elixir 應用程序繼承所有環境變量,使用此選項覆蓋或清除的變量除外。指定值nil
以清除(取消設置)環境變量,這對於防止傳遞給應用程序的憑據泄漏到子進程中很有用。:arg0
- 設置命令 arg0:stderr_to_stdout
- 當true
時將標準錯誤重定向到標準輸出:parallelism
- 當true
時,VM 將調度端口任務以提高係統中的並行性。如果設置為false
,VM 將嘗試立即執行命令,以犧牲並行性為代價來改善延遲。通過將 "+spp" 參數傳遞給--erl
可以在係統啟動時設置默認值。
錯誤原因
如果給出了無效參數,則
由 ArgumentError
引發。 System.cmd/3
還需要一組嚴格的選項,如果給出未知或無效選項,則會引發。System.cmd/3
此外,
可能會因以下詳述的 POSIX 原因之一而失敗:System.cmd/3
-
:system_limit
- Erlang 模擬器中的所有可用端口都在使用中 -
:enomem
- 沒有足夠的內存來創建端口 -
:eagain
- 沒有更多可用的操作係統進程 -
:enametoolong
- 給定的外部命令太長 -
:emfile
- 沒有更多可用的文件說明符(對於運行 Erlang 模擬器的操作係統進程) -
:enfile
- 文件表已滿(針對整個操作係統) -
:eacces
- 命令不指向可執行文件 -
:enoent
- 該命令未指向現有文件
shell 命令
如果您希望在 shell 中執行受信任的命令,使用管道、重定向等,請檢查
。shell/2
相關用法
- Elixir System.stop用法及代碼示例
- Elixir System.fetch_env!用法及代碼示例
- Elixir System.fetch_env用法及代碼示例
- Elixir System.get_env用法及代碼示例
- Elixir System.halt用法及代碼示例
- Elixir System.build_info用法及代碼示例
- Elixir System.shell用法及代碼示例
- Elixir System.pid用法及代碼示例
- Elixir System.restart用法及代碼示例
- Elixir System用法及代碼示例
- Elixir StringIO.flush用法及代碼示例
- Elixir Stream用法及代碼示例
- Elixir String.contains?用法及代碼示例
- Elixir String.reverse用法及代碼示例
- Elixir Stream.drop_while用法及代碼示例
- Elixir String.to_integer用法及代碼示例
- Elixir Stream.map_every用法及代碼示例
- Elixir Stream.iterate用法及代碼示例
- Elixir String.pad_trailing用法及代碼示例
- Elixir Stream.dedup_by用法及代碼示例
- Elixir Stream.interval用法及代碼示例
- Elixir String.split_at用法及代碼示例
- Elixir String.valid?用法及代碼示例
- Elixir String.replace_prefix用法及代碼示例
- Elixir String.printable?用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 System.cmd(command, args, opts \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。