我从节点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()
答案 0 :(得分:1)
看起来您的模块未在Ubuntu服务器上正确安装。您是否安装或更新了所有Ubuntu EC2模块?特别是如果Python子进程没有运行。