So, I am trying to run a python script in my Laravel 5.3.
This function is inside my Controller. This simply passes data to my python script
public
The solution that worked for me was to add 2>&1 to the end.
shell_exec("python path/to/script.py 2>&1");
The issue I was having was no error and no response, I had the wrong path to the script but no way of knowing. 2>&1 will redirect the debug info to be the result.
In the shell, what does " 2>&1 " mean?
Use Symfony Process. https://symfony.com/doc/current/components/process.html
Install:
composer require symfony/process
Code:
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
$process = new Process(['python', '/path/to/your_script.py']);
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
Would be handy to use Symfony Process. https://symfony.com/doc/current/components/process.html
Make sure symphony is available to use in your project
composer show symphony/process
If not installed do composer require symfony/process
And then do some thing like
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
//$process = new Process('python /path/to/your_script.py'); //This won't be handy when going to pass argument
$process = new Process(['python','/path/to/your_script.py',$arg(optional)]);
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();