0

I am using React.JS to create a website, and I have a button that the user can press that will trigger some python file to be run. I've tried using child_process, but I get a ton of errors that I can't seem to find the answer to. Can anyone tell me where I'm going wrong?

This is my code so far:

import React from 'react'
import '../css/Home.css'


const Home = () => {

    const runPyFile = () => {
        const spawn = require('child_process');
    
        const childPython = spawn('python', ['../python/test.py']);
    
        childPython.stdout.on('data', (data) => {
            console.log(`stdout: ${data}`);
        });
    
        childPython.stderr.on('data', (data) => {
            console.log(`stderr: ${data}`);
        });
    
        childPython.on('close', (code) => {
            console.log(`child process exited with code ${code}`);
        });
    };
    

    return (

        <body className='home-body'>
        
            {/* a button that will run the python script */}
            <button onClick={runPyFile}>
                Run Python Script
            </button>

        </body>
        
    )
}

export default Home

And here is the python file I am trying to run:

print('hello world!')

When I run all of this, and click this button in the browser, I receive this error: enter image description here

2
  • This isn't a python question. I'm not a javascript expert but I think you want to do const child_process = require('child_process'); and then use child_process.spawn(...). Commented Apr 9, 2022 at 20:17
  • Hopefully you've seen another option besides pyodide is that you can run python inside the HTML file with pyscript, see here, here, and here. You can try the examples they provide in your browser here, and the accompanying code for those is in the examples directory at the project github repo. Commented May 5, 2022 at 15:28

2 Answers 2

2

What you are trying to do is run a python script from within javascript running in the browser on the client side inside a separate process. I'm afraid you cannot do this because it's a security issue to try to break out of the browser sandbox and reach into the user's computer. Browsers don't allow that. You can't even open a file in the user's space outside the browser.

You are perhaps confused by the idea that if you are writing server side code, you can do things like this there, but that's only available on the server side.

All that said, there are ways to run python code in the browser. Have a look at brython and pyodide

Sign up to request clarification or add additional context in comments.

Comments

0

You can't do that in client side.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.