Javascript 如何在节点js spawn中运行复杂命令?
我正在为nodejs中的docker命令行开发一个lib,我还处于起步阶段,我刚刚在nodejs中使用spawn尝试了基本的docker运行命令-一切都很好,但它不适用于下面这样的复杂情况 我想在nodejs中运行Javascript 如何在节点js spawn中运行复杂命令?,javascript,node.js,Javascript,Node.js,我正在为nodejs中的docker命令行开发一个lib,我还处于起步阶段,我刚刚在nodejs中使用spawn尝试了基本的docker运行命令-一切都很好,但它不适用于下面这样的复杂情况 我想在nodejs中运行docker-run--rm-it julia:0.3.6 julia-E“[x^2代表1:100中的x”,但我发现以下错误- 输入设备不是TTY Docker Shell existed with status = 1 以下代码- const spawn =
docker-run--rm-it julia:0.3.6 julia-E“[x^2代表1:100中的x”
,但我发现以下错误-
输入设备不是TTY
Docker Shell existed with status = 1
以下代码-
const
spawn = require('child_process').spawn,
dockerDeamon = spawn("docker", ["run","--rm", "-it", "julia:0.3.6", "-E", "\" [x^2 for x in 1:100]\""] );
dockerDeamon.stdout.on('data', data => {
console.log(`${data}`);
});
dockerDeamon.stderr.on('data', data => {
console.log(`${data}`);
});
dockerDeamon.on('close', code => {
console.log(`Docker Shell existed with status = ${code}`);
});
有没有更好的方法来执行上述脚本?您正在将
-t
(--tty
)标志传递给Docker,它告诉Docker应该将输入和输出连接到终端(tty)。但是,当您使用spawn
时,您将其附加到程序中的Node.js流。Docker注意到了这一点,因此给出了错误输入设备不是TTY
。因此,在这种情况下,您不应该使用-t
标志
另外,请注意,在上一个参数中不需要嵌套引号,
“\”[x^2代表1:100中的x]\”
。引号的作用是在shell中运行时保留参数中的空格和其他特殊字符,但当您使用spawn
时,您没有使用shell
所以你的陈述应该是这样的:
dockerDeamon = spawn("docker", ["run","--rm", "-i", "julia:0.3.6", "julia", "-E", "[x^2 for x in 1:100]"] );
我正在尝试此操作,但对于上述命令,`starting container process Result'exec:\'-E\':在$PATH“`中找不到可执行文件。@Sam这是因为紧跟在映像名称后面的应该是您缺少的命令名称(命令参数直接位于映像名称之后)。您应该能够在
“julia:0.3.6”
和“-E”
之间添加命令名“julia”
。我在回答中更新了命令以反映这一点。