আমি এখনও কীভাবে লিনাক্স বা উইন্ডোজ শেল কমান্ড চালাতে পারি এবং নোড.জেএস এর মধ্যে আউটপুট ক্যাপচার করতে পারি তার সূক্ষ্ম পয়েন্টগুলি উপলব্ধি করার চেষ্টা করছি; শেষ পর্যন্ত, আমি এই জাতীয় কিছু করতে চাই ...
//pseudocode
output = run_command(cmd, args)
গুরুত্বপূর্ণ অংশটি হ'ল output
অবশ্যই বিশ্বব্যাপী স্কোপযুক্ত ভেরিয়েবল (বা বস্তু) এর জন্য উপলব্ধ। আমি নীচের ফাংশনটি চেষ্টা করেছিলাম, তবে কোনও কারণে, আমি undefined
কনসোলে মুদ্রিত হয়েছি ...
function run_cmd(cmd, args, cb) {
var spawn = require('child_process').spawn
var child = spawn(cmd, args);
var me = this;
child.stdout.on('data', function(me, data) {
cb(me, data);
});
}
foo = new run_cmd('dir', ['/B'], function (me, data){me.stdout=data;});
console.log(foo.stdout); // yields "undefined" <------
কোডটি উপরে যেখানে ব্রেক করা হয়েছে তা বুঝতে আমার সমস্যা হচ্ছে ... সেই মডেলের খুব সাধারণ প্রোটোটাইপ কাজ করে ...
function try_this(cmd, cb) {
var me = this;
cb(me, cmd)
}
bar = new try_this('guacamole', function (me, cmd){me.output=cmd;})
console.log(bar.output); // yields "guacamole" <----
কেউ আমাকে বুঝতে সাহায্য করে যে try_this()
কাজ করে কেন , এবং run_cmd()
না? এফডাব্লুআইডাব্লু, আমার ব্যবহার করা দরকার child_process.spawn
, কারণ child_process.exec
200 কেবি বাফার সীমা রয়েছে।
চূড়ান্ত রেজোলিউশন
আমি জেমস হোয়াইটের উত্তর গ্রহণ করছি, তবে এটি হ'ল কোড যা আমার পক্ষে কাজ করেছে ...
function cmd_exec(cmd, args, cb_stdout, cb_end) {
var spawn = require('child_process').spawn,
child = spawn(cmd, args),
me = this;
me.exit = 0; // Send a cb to set 1 when cmd exits
me.stdout = "";
child.stdout.on('data', function (data) { cb_stdout(me, data) });
child.stdout.on('end', function () { cb_end(me) });
}
foo = new cmd_exec('netstat', ['-rn'],
function (me, data) {me.stdout += data.toString();},
function (me) {me.exit = 1;}
);
function log_console() {
console.log(foo.stdout);
}
setTimeout(
// wait 0.25 seconds and print the output
log_console,
250);
me.stdout = "";
মধ্যেcmd_exec()
concatenating প্রতিরোধundefined
ফলাফলের শুরুতে।