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 \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。