Home > Blockchain >  How do I pass an array of strings and ints from JS to Python 3.8?
How do I pass an array of strings and ints from JS to Python 3.8?

Time:06-15

I have looked at the other questions similar to this but they don't work for me well.

My question is I have this code here:

function pyInput(){
    const buffers = [];

    proc.stdout.on('data', (chunk) => buffers.push(chunk));
    proc.stdout.on('end', () => {
        const result = JSON.parse(Buffer.concat(buffers));
        console.log('Python process exited, result:', result);
    });
    proc.stdin.write(JSON.stringify([['a','b',1],['b','c',-6],['c','a',4],['b','d',5],['d','a', -10]]));
    proc.stdin.end();


}

The python function I'm trying to pass this to:

def createGraph(listOfAttr):


    for i in range(len(listOfAttr)):

        G.add_edge(listOfAttr[i][0], listOfAttr[i][1], weight = listOfAttr[i][2])

    
#createGraph([['a','b',1],['b','c',-6],['c','a',4],['b','d',5],['d','a', -10]])

my_list = json.load(sys.stdin)
json.dump(my_list,sys.stdout)

The code is basically for finding negative cycles in a graph, and I want to load that data in from node js. However my python program never finishes executing, it just gets stuck and I dont know why. For now I won't pass the list from Node into the py function, but I am trying to at least print it out to see if its being passed to python.

CodePudding user response:

The json.load() from sys.stdin is probably the problem. Since sys.stdin is a pipe, it never actually closes until you tell it to, so it just hogs the stream, waiting for new data. You can probably hog the stream for just some time using input() until you receive some sort of input string telling you you hit the end, then moving along. Make sure to update your node.js script aswell, to feed each piece of data as line, terminated by a \n, and to send the end signal you specified once it's done.

  • Related