1

次のpythonコード(script.py)があります:

import sys
import numpy as np
from scipy import stats

def generateBeta() :
    fit = (0.075252656968743836, 498.49505071718869, 9.9999999999999991e-05, 0.18136881492296397)
    rnd = stats.beta.rvs(fit[0], fit[1], fit[2], fit[3], 581)
    rndStr = ""
    for i in rnd:
            rndStr += str(i) + ','
    print rndStr[0:len(rndStr)-1]

if __name__ =='__main__' :
    generateBeta()

「python script.py」を実行すると、次のような結果が得られます。

0.000461650100253,0.000100731728317,0.000106550237062,0.000168159408577,0.000167330103757,0.000100050650386,0.000127253399976,0.000100193300275,0.000101258755861,0.000115222086572,0.00010000230276, ....

すべて一行で

次の方法で node.js child_process#spawn を使用して呼び出すと:

var sys   = require('sys'),
    spawn = require('child_process').spawn,
    pyScript = spawn('python', ['./script.py']);
pyScript.stdout.setEncoding('utf8');
pyScript.stdout.on('data', function (data) {
  console.log(data);
});

数字は '\n' のようなもので中断されますが、そうではありません。何らかの理由でストリームが中断された、つまり

0.000461650100253,0.000100731728317,0.000106550237062,0.000168159408577,0.000167330103757,0.000100050650386,0. 000127253399976,0.000100193300275,0.000101258755861,0.000115222086572,0.00010000230276, ...

これは、データを解釈する際のエラーにつながります (つまり、0.000127 が後で 127 として解釈されます..)

なぜこのような中断が発生するのか誰にもわかりませんか??

ありがとう!!

アリエル。

4

2 に答える 2

0

設計ごとconsole.logに、出力の最後に改行を書き込みます。

process.stdout.writeおそらく代わりに使用したいでしょう。

http://nodejs.org/api/stdio.html#stdio_console_log_data http://nodejs.org/api/process.html#process_process_stdout

于 2013-07-30T00:51:41.643 に答える