2013-07-30 44 views
0

我有以下的Python代码(script.py):node.js的产卵标准输出弦破

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

当运行 “蟒蛇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#产卵:

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 ..)

有谁知道为什么这样的中断发生?

谢谢!

Ariel。

回答

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

+0

似乎这不是解决问题.. 只是要更清晰,如果你这样做: pyScript.stdout.on( '数据',函数(数据){VAR = numsStr data.split(” ,'); numsStr.forEach(function(d){process.stdout.write(d +'\ n')}); }); 你会得到这样一个中断列表: 。 。 0.000100000110464 0.000106758505167 0.00010000000011 0.00 0.000119640546224 0.000100000000009 0.000101159669859 0.000100000000352 正如你所看到的,数量0.000103933774349将被解释为2号,分别为0.00和103933774349。 –

+0

目前还不清楚这是你问的问题。需要了解的细节是,当你的''data''处理程序被调用时,它会传递一大块缓冲数据 - 它与你的数据没有任何关系。所以你不能假定它只会是一个数字,因此不能立即插入像'\ n'这样的分隔符。在输出数据之前,您需要自己收集和解析数据,或者仅使用您的Python脚本直接提供的任何分隔符。 – adpalumbo

+0

Python在每个数字之间传递一个带有“,”的字符串。 var numsStr = data.split(',')应该注意分割这个。我正在收集数据并解析它。还有一个问题。 –

0

正如adpalumbo指出的上方,该事件数据被称为对于每个 “块”。 问题是通过将数据和事件发生后采取行动解决“关闭”时:

var allData = ""; 
    pwScript.stdout.on('data', function (data) { 
     allData = allData.concat(data); 
    }); 

pyScript.on('close', function() { 
    allData.split(',').forEach(function(d) { process.stdout.write(d + '\n')}); 
}); 

adpalumbo,感谢您指出了这一点!

相关问题