2011年8月1日 星期一

[分享] node.exe 利用child_process做些事情

node v0.5.3 版本終於出現了,先看一下原文到底做了哪些更新。

2011.08.01, Version 0.5.3 (unstable)

Fix crypto encryption/decryption with Base64. (SAWADA Tadashi)
#243 Add an optional length argument to Buffer.write() (koichik)
#657 convert nonbuffer data to string in fs.writeFile/Sync (Daniel Pihlström)
Add process.features, remove process.useUV (Ben Noordhuis)
#324 Fix crypto hmac to accept binary keys + add test cases from rfc 2202 and 4231 (Stefan Bühler)
Add Socket::bytesRead, Socket::bytesWritten (Alexander Uvarov)
#572 Don’t print result of –eval in CLI (Ben Noordhuis)
#1223 Fix http.ClientRequest crashes if end() was called twice (koichik)
#1383 Emit ‘close’ after all connections have closed (Felix Geisendörfer)
Add sprintf-like util.format() function (Ben Noordhuis)
Add support for TLS SNI (Fedor Indutny)
New http agent implementation. Off by default the command line flag --use-http2 will enable it. make test-http2 will run the tests for the new implementation. (Mikeal Rogers)
Revert AMD compatibility. (isaacs)
Windows: improvements, child_process support.
Remove pkg-config file.
Fix startup time regressions.
doc improvements

這次更新主要的幾個重點在於,windows用戶來說最大的更動開始支援child_process,node能夠支援child_process之後,就可以做很多(壞)事情。

模組(Modules)幾乎都可以支援(目前專案上所使用的模組都可以支援),雖然幾經測試之後筆者這邊的npm還是無法安裝成功。但是根據上篇文章的windows模組加載方式,皆可以正常執行。

關於child_process
測試nodejs code,儲存為test.js
var exec = require('child_process').exec,
    ls    = exec('dir');

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

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

使用node.exe v0.5.2以前,會造成錯誤無法執行

使用node.exe v0.5.3,可以正確執行cli指令

結語
child_process可以讓node.exe變成windows本地端服務的產出,這邊只是一個小小範例,當然各位的技術都比我強,說不定能產出些java xxxx.java之類的指令做出些更奇怪偉大的事情出來。


沒有留言:

張貼留言

Facebook