错误:从nodejs运行python子进程时读取ECONNRESET

时间:2017-08-08 21:54:20

标签: python node.js amazon-ec2

我从节点js在EC2 Ubuntu上运行python子进程时收到错误。 node.js永远不会调用生成的子进程,但是在本地工作的情况下完全正常。 我们最初得到一个EPIPE错误,直到我们使用'sudo apt-get install libfontconfig',然后在下面产生了这个错误:

events.js:160
      throw er; // Unhandled 'error' event
      ^ //error Error: read ECONNRESET
    at exports._errnoException (util.js:1020:11)
    at Pipe.onread (net.js:568:26)



        //child process             
        urlCrawlJob(hostname, pageCounter+1, accessToken); //recursive calling of the function


        var process = SPAWN('python', [PATH.join(__dirname,"../pyScripts/crawler.py")]),

        data = body.customers;
        dataString = '';

        console.log(`Spawned child pid: ${process.pid}`);
        process.stdout.on('error', function (err) {
            console.log('stdout error: ', err);
            console.log(err.code);
        });

        process.stdout.on('data', function(data){
            dataString+=data
            console.log(dataString);
        });
        process.stdout.on('end', function(){

            console.log("ending child process -----> call url");

        });
        process.stdin.write(JSON.stringify({"data":data,"hostname":hostname}));
        process.stdin.end();                

    //python script

## process_init.py

#crete seperate function, impletment oop concepet

import sys, json, pymongo, os


#defaukt address, email, phnNo, total spe

print "==> in crawler python"

#print sys.args[0];

def main():
    data = json.load(sys.stdin)
    hostname = data['hostname'];
    customerData = data['data'];

    print hostname


    collection = dbConnection(hostname)


    #isFile = open("/crawlerResult/"+hostname+".txt","w+")


    pwd = os.getcwd()

    print pwd
    file = open(pwd+"/crawlerResult/"+hostname+".txt", "a++")

    iteratingData(customerData, file, collection)


    print "=====\n\n"
    client.close();                             #close the db connection
    sys.stdout.flush();  

def dbConnection(hostname):

    #opening connection with db
    client = pymongo.MongoClient('127.0.0.1', 27017) ;                          # TODO: if connection already open do not open neew one
    #   print client
    db = client["customerLTV"];
    print db
    collection = db[hostname];
    return collection


def iteratingData(customerData, file, collection):

    count = 0
    data = {}
    for i in customerData:
        #print i
        count += 1
        #print len(i["addresses"]);

        try:


            strdata = {}
            strdata[count] = data   
            strdata = json.dumps(strdata)
            file.write(strdata + "\n")                  


            data.pop('_id', None)
            collection.insert(data)         
            data = {}
        except Exception, e:
            print str(e)

    print count;




#start process
if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

看起来您的模块未在Ubuntu服务器上正确安装。您是否安装或更新了所有Ubuntu EC2模块?特别是如果Python子进程没有运行。