Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在节点js spawn中运行复杂命令?_Javascript_Node.js - Fatal编程技术网

Javascript 如何在节点js spawn中运行复杂命令?

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 =

我正在为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 = 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”
。我在回答中更新了命令以反映这一点。