2013-07-19 6 views
14

का उपयोग करते समय मैंने node.js ऐप को .txt फ़ाइलों को दोबारा निर्देशिका से सूचीबद्ध करने के लिए बनाया है और प्रत्येक के लिए, कुछ चीज़ें करें।नोडजेएस: फेंक एर; // अनचाहे 'त्रुटि' घटना (events.js: 72) child_process spawn विधि

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) 

मैं win32 पर्यावरण पर नोड v0.10.13 उपयोग कर रहा हूँ:

var spawn = require('child_process').spawn, 
    dir = spawn('dir', ['*.txt', '/b']); 

dir.stdout.on('data', function (data) { 
    //do some stuff with each stdout line... 
    console.log('stdout: ' + data); 
}); 

dir.stderr.on('data', function (data) { 
    //throw errors 
    console.log('stderr: ' + data); 
}); 

dir.on('close', function (code) { 
    console.log('child process exited with code ' + code); 
}); 

जब मैं कंसोल के माध्यम से node app.js चलाने के लिए, मैं नीचे त्रुटि संदेश मिलता है:

यहाँ मेरी app.js है।

मैं क्योंकि मैं लाइन द्वारा stdout लाइन (कार्यकारी विधि रिहाई पूरे stdout एक स्ट्रिंग के रूप में) हैंडल करना चाहते हैं इस तरह से (अंडे) से करते हैं।

* अद्यतन *

वैसे, child_process के लिए spawn का उपयोग कर गारंटी नहीं है कि cmd dir के लिए उत्पादन लाइन द्वारा लाइन हो जाएगा। मैंने question for that भी बनाया है।

उत्तर

17

ऐसा इसलिए होता है क्योंकि dir विंडोज में निष्पादन योग्य नहीं है। यह खोल से एक आदेश है।

var dir = spawn('cmd', ['/c', 'dir']); 
dir.stdout.on("data", function() { 
    // do things 
}) 

इस सटीक समस्या here भी था:
आपकी समस्या के लिए समाधान निम्नलिखित है।

+1

डाउनवॉटर, क्या आप समझा सकते हैं ?? – gustavohenke

+4

मैंने डाउनवोट नहीं किया है, लेकिन यह उत्तर वास्तव में प्रश्न का उत्तर नहीं देता है - त्रुटि को कैप्चर करने के लिए हम कहां ('त्रुटि', एफएन) हैंडलर संलग्न करते हैं (केवल त्रुटि को रोक नहीं!)। –

+0

@AlexMills यहां कोई वास्तविक सवाल नहीं है, कोई "?" नहीं है :) और 'त्रुटि' हैंडलर को तैयार प्रक्रिया पर संलग्न किया जाना चाहिए। – gustavohenke

12

कई बातें:

  • dir तो Node.js कार्यक्रम आप चलाना चाहते हैं नहीं मिल सकता है, खिड़कियां में एक वास्तविक निष्पादन योग्य नहीं है।
  • आपने 'error' हैंडलर को अपने बच्चे की प्रक्रिया में बाध्य नहीं किया था और ईवेंट को अपवाद में बदल दिया गया था जो आपके नोड इंस्टेंस को क्रैश कर देता था। यह करें:
 
dir.on('error', function (err) { 
    console.log('dir error', err); 
}); 
  • उपयोग fs.readdir बजाय। यह एक मानक node.js एपीआई है जो एक ही काम करता है।
संबंधित मुद्दे