बफरिंग के बिना Node.js से एक शेल कमांड चला रहा है, मैं उस आदेश के इनपुट और आउटपुट को पुनर्निर्देशित करने के बिना के बिना Node.js, से एक शेल कमांड लॉन्च करने का प्रयास कर रहा हूं - जैसे कि शेल स्क्रिप्ट का उपयोग करके कमांड को खोलना , या रूबी के system
कमांड का उपयोग कर। अगर बाल प्रक्रिया STDOUT को लिखना चाहती है, तो मैं चाहता हूं कि सीधे कंसोल पर जाएं (या रीडायरेक्ट हो जाएं, अगर मेरा नोड ऐप का आउटपुट रीडायरेक्ट किया गया हो)।आउटपुट
नोड ऐसा करने का कोई आसान तरीका प्रतीत नहीं होता है। ऐसा लगता है कि एक और प्रक्रिया चलाने का एकमात्र तरीका child_process
है, जो हमेशा बाल प्रक्रिया के इनपुट और आउटपुट को पाइप पर रीडायरेक्ट करता है। मैं उन पाइपों से डेटा स्वीकार करने के लिए कोड लिख सकता हूं और इसे अपनी प्रक्रिया के एसटीडीओयूटी और एसटीडीईआरआर में लिख सकता हूं, लेकिन अगर मैं ऐसा करता हूं, तो एपीआई मुझे कुछ लचीलापन बलिदान देने के लिए मजबूर करती है।
- शैल वाक्य रचना:
मैं दो सुविधाओं चाहते हैं। मैं आदेशों के बीच पाइप आउटपुट करने में सक्षम होना चाहता हूं, या विंडोज बैच फ़ाइलों को चला सकता हूं।
- असीमित आउटपुट। अगर मैं एक कंपाइलर के लिए खोल रहा हूं और यह कंपाइलर चेतावनियों के मेगाबाइट जेनरेट करना चाहता है, तो मैं चाहता हूं कि वे सभी स्क्रीन पर स्क्रॉल करें (जब तक कि उपयोगकर्ता इसका बीमार न हो जाए और Ctrl + C दबाए)।
ऐसा लगता है कि नोड मुझे उन दो विशेषताओं के बीच चुनने के लिए मजबूर करना चाहता है।
- अगर मैं उत्पादन की एक असीमित राशि चाहता हूँ, मुझे
child_process.spawn
उपयोग कर सकते हैं और फिरstderr
के लिएchild.stdout.on('data', function(data) { process.stdout.write(data); });
और एक ही बात करते हैं, और यह गायों जब तक खुशी से पाइप डेटा घर आया हूँ। दुर्भाग्य से,spawn
शैल वाक्यविन्यास का समर्थन नहीं करता है। - यदि मुझे खोल वाक्यविन्यास चाहिए, तो मैं
child_process.exec
का उपयोग कर सकता हूं। लेकिनexec
मेरे लिए बाल प्रक्रिया के STDOUT और STDERR को बफर करने और अंत में उन्हें सभी को देने पर जोर देता है, और यह उन बफर (डिफ़ॉल्ट रूप से कॉन्फ़िगर करने योग्य, 200K) के आकार को सीमित करता है। मैं अभी भीon('data')
घटनाओं को हुक कर सकता हूं, अगर मैं आउटपुट को जेनरेट करना चाहता हूं, लेकिनexec
अभी भी डेटा को अपने बफर में जोड़ देगा। जब डेटा की मात्रा पूर्वनिर्धारित बफर आकार से अधिक हो जाती है,exec
बाल प्रक्रिया को समाप्त कर देगी।
(वहाँ भी जो सबसे खराब एक लचीलापन दृष्टिकोण से दोनों दुनिया का है child_process.execFile
,:। कोई खोल वाक्य रचना, लेकिन आप अभी भी उत्पादन जैसा कि आप उम्मीद की राशि टोपी है)
मुझे याद आ रही कुछ कुछ? क्या नोड में बाल प्रक्रिया को खोलने का कोई तरीका है, और इसके इनपुट और आउटपुट को पुनर्निर्देशित नहीं करता है? कुछ जो शेल सिंटैक्स का समर्थन करता है और आउटपुट की पूर्वनिर्धारित मात्रा के बाद बाहर नहीं निकलता है, जैसे कि शैल स्क्रिप्ट्स, रूबी इत्यादि में उपलब्ध है?
क्या आपने कभी इसे समझ लिया था? मैं एक समान स्थिति में हूं। –
एक ही मुद्दा, 'गायों के घर आने तक' धन्यवाद, इसके लिए, 10h के काम के बाद मेरा दिन बनाया – neric