简体   繁体   中英

nodejs error: spawn ENOENT

I am very newbie with nodejs, I am trying to run it:

I obtain:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:980:11)
    at Process.ChildProcess._handle.onexit (child_process.js:771:34)

How Can I solve?


May be the problem is inside this code:

/**

 */
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
/*global define, require, module, process */

var childprocess = require("child_process"),
    util = require("util"),
    fs = require("fs");
var procWrapper = require("./processwrapper");
var spawn = childprocess.spawn;
module.exports = function () {
    "use strict";
    var pvs = procWrapper();
    var o                                   = {},
        output                              = [],
        readyString                         = "<PVSio>",
        wordsIgnored                        = ["", "==>", readyString],
        restarting                          = false,
        sourceCode,
        filename,
        processReady                        = false,
        pvsio,
        workspaceDir                        = process.cwd() + "/public/";
    /**
     * get or set the workspace dir. this is the base directory of the pvs source code
     * @param {String} dir
     * @return {String} the current workspace directory
     */
    o.workspaceDir = function (dir) {
        if (dir) {util.log("OK");

            dir = dir.substr(-1) !== "/" ? (dir + "/") : dir;
            workspaceDir = dir;
    util.log("OOO");
            return o;
        }
util.log("IIII");
        return workspaceDir;
    };

    /**
     * starts the pvs process with the given sourcefile 
     * @param {String} filename source file to load with pvsio
     * @param {function({type:string, data:array})} callback function to call when any data is received  in the stdout
     * @param {function} callback to call when processis ready
     */
    o.start = function (file, callback, processReadyCallback) {
        filename = o.workspaceDir() + file;
        function onDataReceived(data) {
            var lines = data.split("\n").map(function (d) {
                return d.trim();
            });
            var lastLine = lines[lines.length - 1];
            //copy lines into the output list ignoring the exit string, the startoutput string '==>'
            //and any blank lines
            output = output.concat(lines.filter(function (d) {
                return wordsIgnored.indexOf(d) < 0;
            }));

            if (processReady && lastLine.indexOf(readyString) > -1) {
                var outString = output.join("").replace(/,/g, ", ").replace(/\s+\:\=/g, ":=").replace(/\:\=\s+/g, ":=");
                //This is a hack to remove garbage collection messages from the output string before we send to the client
                var croppedString = outString.substring(0, outString.indexOf("(#"));
                outString = outString.substring(outString.indexOf("(#"));
                util.log(outString);
                callback({type: "pvsoutput", data: [outString]});
                //clear the output
                output  = [];
            } else if (lastLine.indexOf(readyString) > -1) {
                //last line of the output is the ready string
                processReadyCallback({type: "processReady", data: output});
                processReady = true;
                output = [];
            }
        }

        function onProcessExited(code) {
            processReady = false;
            var msg = "pvsio process exited with code " + code;
            util.log(msg);
            callback({type: "processExited", data: msg, code: code});
        }

        pvs.start({processName: "pvsio", args: [filename],
            onDataReceived: onDataReceived,
            onProcessExited: onProcessExited});

        util.log("pvsio process started with file " + filename + "; process working directory is :" + o.workspaceDir());
util.log("OK");

        return o;
    };

    /**
     * sends a command to the pvsio process. This method returns immediately. The result of the command
     * will be by the 'on data' event of the process standard output stream
     * @param {string} command the command to send to pvsio
     */
    o.sendCommand = function (command) {
        util.log("sending command " + command + " to process");
        pvs.sendCommand(command);
        return o;
    };

    /**
     * gets the source code pvs io is executing
     * @param {string} path the path the to file whose content is to be fetched
     * @param {function({type:string, data, message:string})} callback callback to execute when sourcecode has been loaded
     * @returns {this}
     */
    o.readFile = function (path, callback) {
        pvs.readFile(path, callback);
        return o;
    };

    /**
     * writes  the file passed to the disk
     * @param {fileName:string, fileContent: string} data Object representing the sourcecode to save
     * @param {function ({type: string, data: {fileName: string}})} callback function to invoke when the file has been saved
     */
    o.writeFile = function (path, data, callback) {
        pvs.writeFile(path, data, callback);
        return o;
    };


    /**
     * closes the pvsio process
     * @param {string} signal The signal to send to the kill process. Default is 'SIGTERM'
     */
    o.close = function (signal) {
        signal = signal || 'SIGTERM';
        pvs.kill(signal);
        return o;
    };
    return o;
};

After have started it , I go to localhost:8082 and it crashes! That's all. I' am sorry, it's possible that throw this little information you can't help me.

I got the same error, after updating a lot of programs on my Windows 7 machine. Luckily I could remember that I removed git and installed it again using a newer version and different installation options. The difference was to select the 3rd option in "Adjusting PATH environment" settings ("Use Git and optional Unix tools from the Windows Command Prompt").

After updating node.js to a newer version (actually 0.10.31) the problem still exists. So I deciced to remove git again, and et'voila, socket server is working again. Now I will install git again with the default options, which do not to modify the PATH environment variable.

So the problem comes from unix tools accessible through PATH variable such as installed by MinGW, Git or Cygwin (probably - not tested).

  • Read readme
  • Try to install this using npm install pvsio-web -g or (if your /usr/local/ directory is owned by root) sudo npm install pvsio-web -g
  • You should installed pvs and pvsio on your computer
  • You should ensure that pvsio is available as a command on your path
  1. If you don't want to install pvsio globally you can run it from node_modules/.bin
  2. You should have to register to 'error' events of spawn, see: NodeJS: throw er; //Unhandled 'error' event (events.js:72) when using child_process spawn method

A very simple cause of this error: you're installing an application on a new server and the code is trying to run a linux CLI program that hasn't yet been installed on that particular server.

In my case, the code was spawning a process running inotify . So going to the linux command line and running

apt-get install inotify-tools

resolved the error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM