2012-04-05 14 views
0

私は、コマンドをpythonの子プロセスに渡して、結果を取得したいと考えています。私はexecを使いますが、子プロセスを開いたままにして、新しいコマンドを実行するたびに開く必要はありません。ここに私のコードは現在何もしていません:node.jsのサブプロセス操作の結果を取得する方法

var connect = require('connect'), 
    io = require("socket.io").listen(1032), 
    util = require("util"), 
    child = require('child_process'), 
    python = child.spawn("python"); 

var app = connect() 
    .use(connect.static(__dirname + '/www')) 
    .use(connect.logger('dev')) 
    .listen(3000); 

io.sockets.on('connection', function (socket) { 
    console.log("Socket " + socket.id + " opened"); 

    python.stdout.on('data', function (data) { 
     console.log("computed", data.toString("utf-8")); 
     socket.emit("python", { result : data.toString("utf-8") }); 
    }); 

    socket.on('python', function (data) { 
     console.log("received data" + data.cmd); 

     python.stdin.resume(); 

     python.stdin.write(data.cmd); 

     python.stdin.end(); 
    }); 
}); 

答えて

1

あなたのpythonコードには非ASCII文字が含まれていますか?

これは正常に動作します:

var 
    spawn = require('child_process').spawn, 
    python = spawn('python'); 

python.stdin.write('print ("a")'); 
python.stdin.end(); 

python.stdout.on('data', function (data) { 
     console.log(data.toString()); 
}); 

しかし、私はそれが動作を停止し、「П」「」ロシアの手紙への手紙を変更した場合。イベントは起動されません。

しかし、(任意のutf8文字で)ノードインタープリタで完璧に動作します。

var 
    spawn = require('child_process').spawn, 
    node = spawn('node'); 

node.stdin.write('console.log("п");'); 
node.stdin.end(); 

node.stdout.on('data', function (data) { 
     console.log(data.toString()); 
}); 

私はあなたがそれについてPythonのセクションで質問する必要があると思います。

関連する問題