4

I have an Express application that spawns a Python process to execute a Python script. When I do a firebase serve, I can see that my endpoint is being hit, which then runs the Python process. However, the process doesn't seem to be executing.

const runPythonScript = () => {
    return new Promise((resolve, reject) => {
        let value;
        const spawn = require('child_process').spawn;
        const pythonProcess = spawn('python', ['./myScript.py']);

        pythonProcess.stdout.on('data', (data: string) => {
            console.log('Am I being hit?') // This line is not being hit
            value = JSON.parse(data);
        });

        pythonProcess.on('exit', (code: number) => {
            if (code === 0) {
                resolve(value);
            }
            else {
                reject(value);
            }
        });
    });
}

From the comment in the code above, the listener for stdout 'data' is not being hit. I'm not too familiar with Firebase, but my idea is to use Firebase Hosting for my frontend and then Firebase Cloud Functions to run my Express server. Is there anything that I need to do in order for my application to run the Python script?

From what I've gathered from other StackOverflow posts (here), I can't run a Python process, perhaps because Firebase Cloud Functions does not have Python installed. So instead, I need to package my Python script into an executable (as described here), so that Firebase Cloud Functions can just run the executable. Is this correct? If so, I would prefer not to have to package all of my Python scripts. Is there a better approach to handling this? Is it free?

natn2323
  • 1,983
  • 1
  • 13
  • 30

1 Answers1

6

From what I've gathered from other StackOverflow posts, I can't run a Python process, perhaps because Firebase Cloud Functions does not have Python installed.

This is true.

So instead, I need to package my Python script into an executable (as described here), so that Firebase Cloud Functions can just run the executable. Is this correct?

You can certainly try this, but I don't recommend it. It sounds like a lot of work for little benefit, especially when you have other options.

Is there a better approach to handling this?

You can write Cloud Functions natively in python. You just won't be able to use Firebase tools to test and deploy them. Google Cloud has everything you need to get started.

Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
  • Thanks for the suggestion. I'm going to try to go with using Google Cloud Functions (GCF) for my solution. In retrospect, it's probably atypical to have a backend written in JS and Python. But I'll implement a GCF for ExpressJS that calls on additional GCF's that run the Python scripts. – natn2323 Jun 12 '20 at 15:49