如何并行运行System.cmd



我想在混合任务中启动这两个命令:

System.cmd("cmd.exe", ["/c", "mix phx.server"], into: IO.stream(:stdio, :line))
System.cmd("cmd.exe", ["/c", "npm run dev"], cd: ".\frontend", into: IO.stream(:stdio, :line))

然而,它们都是阻塞的,因此,尽管有命令,第二个永远不会被执行。如何同时启动它们?

虽然@sabiwara上面的评论是绝对正确的,但我要解决明确指出的确切问题。

可以使用Task.async/1,甚至仅使用spawn/3:

spawn(
System, 
:cmd,
["cmd.exe", ["/c", "mix phx.server"], into: IO.stream(:stdio, :line)]
)
spawn(
System,
:cmd, 
["cmd.exe", ["/c", "npm run dev"],
cd: ".\frontend", into: IO.stream(:stdio, :line)]
)

最新更新