我想在混合任务中启动这两个命令:
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)]
)