0

Pythonの子プロセスにコマンドを渡して、結果を取得したいと思います。execを使用しますが、新しいコマンドを実行するたびに子プロセスを開く必要がないように、子プロセスを開いたままにしておきたいと思います。これが現在何もしない私のコードです:

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();
    });
});
4

1 に答える 1

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());
});

しかし、文字「a」をロシア語の文字「п」に変更すると、機能しなくなります。イベントは発生しません。

ただし、ノードインタープリター(任意の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のセクションで質問する必要があると思います。

于 2012-04-06T01:23:08.250 に答える