Не запускается python файл из php

Есть сайт на php, который расположен на удаленном сервер с Ubuntu 18.04. На сайте есть поле ввода текста, и при нажатии кнопки этот текст отправляется на сервер. На сервере этот текст принимает php файл, затем в этом php файле запускается python файл, который должен синтезировать принятый текст в речь.
Код php файла:

<?php

function clear($var) {
    $var = trim($var);
    $var = strip_tags($var);
    $var = htmlentities($var, ENT_IGNORE, "UTF-8");
    $var = stripcslashes($var);
    return $var;
}

if (isset($_POST['text']) && !empty($_POST['text'])) {
    $text = clear($_POST['text']);

    // Запись текста в файл
    $temp_text_file = fopen('temp_text.txt', 'w');
    $text_write = fwrite($temp_text_file, $text);
    fclose($temp_text_file);
    
    // Запуск python файла
    if ($text_write) {
        $command = escapeshellcmd("python3 main_synthesizer.py");
        $output =  system($command);
        $uniq_audio_name = 'audio/synthesized_audio' . uniqid() . '.wav';
        $audio_rename = rename('audio/sounds.wav', $uniq_audio_name);
        if ($audio_rename) {
            echo $uniq_audio_name;
        }
        else {
            echo "audio/synthesized_audio.wav";
        }
        
    }
    else {
        echo "Не удалось записать текст в файл";
    }
}
?>

Код python файла main_synthesizer.py:

from normalizator import normalizator
from synthesize import synthesize

# Присваивание текста введенной пользователем переменной
with open('temp_text.txt', 'r', encoding='utf-8') as fr:
tmp_text = fr.read()

# Нормализация текста   
text = normalizator(tmp_text)

# Запись нормализованного текста в файл elisa.txt
with open('elisa.txt', 'w') as fw:
    fw.write(text)

# Запускаем синтез
synthesize()

Если запускать этот python файл напрямую, то он работает отлично. Но из php когда вызываю он не работает. Но, если убрать из кода этого python файла эту строку from synthesize import synthesize, то он запускается из php и работает, но без функции synthesize. Файл synthesize.py находится в той же папке, что и файл main_synthesizer.py.
Я пробовал разные варианты запуска python файла из php:

$command = escapeshellcmd("python3 main_synthesizer.py");
$output =  exec($command);

И так пробовал:

$command = escapeshellcmd("python3 main_synthesizer.py");
$output =  shell_exec($command);

И так пробовал:

$command = escapeshellcmd("python3 main_synthesizer.py 2>&1");
$output =  shell_exec($command);

Никак не запускается при импорте функции synthesize()
Код файла synthesize.py:

# -*- coding: utf-8 -*-
# /usr/bin/python2
'''
By kyubyong park. [email protected].
https://www.github.com/kyubyong/dc_tts
'''

from __future__ import print_function

import os

from hyperparams import Hyperparams as hp
import numpy as np
import tensorflow as tf
from train import Graph
from utils import *
from data_load import load_data
from scipy.io.wavfile import write
from tqdm import tqdm

def synthesize():
    # Load data
    L = load_data("synthesize")

    # Load graph
    g = Graph(mode="synthesize"); print("Graph loaded")

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

    # Restore parameters
    var_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'Text2Mel')
    saver1 = tf.train.Saver(var_list=var_list)
    saver1.restore(sess, tf.train.latest_checkpoint(hp.logdir + "-1"))
    print("Text2Mel Restored!")

    var_list = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'SSRN') + \
               tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, 'gs')
    saver2 = tf.train.Saver(var_list=var_list)
    saver2.restore(sess, tf.train.latest_checkpoint(hp.logdir + "-2"))
    print("SSRN Restored!")

    # Feed Forward
    ## mel
    Y = np.zeros((len(L), hp.max_T, hp.n_mels), np.float32)
    prev_max_attentions = np.zeros((len(L),), np.int32)
    for j in tqdm(range(hp.max_T)):
        _gs, _Y, _max_attentions, _alignments = \
            sess.run([g.global_step, g.Y, g.max_attentions, g.alignments],
                     {g.L: L,
                      g.mels: Y,
                      g.prev_max_attentions: prev_max_attentions})
        Y[:, j, :] = _Y[:, j, :]
        prev_max_attentions = _max_attentions[:, j]

    # Get magnitude
    Z = sess.run(g.Z, {g.Y: Y})

    # Generate wav files
    if not os.path.exists(hp.sampledir): os.makedirs(hp.sampledir)
    for i, mag in enumerate(Z):
        print("Working on file", i+1)
        wav = spectrogram2wav(mag)
        write(hp.sampledir + "/{}.wav".format(i+1), hp.sr, wav)

if __name__ == '__main__':
    synthesize()
    print("Done")

Все файлы имеют права chmod 777


Ответы (1 шт):

Автор решения: Heretic Sic

Вам необходимо написать путь от корня. Например $python = shell_exec('python3 /var/www/и так далее - полный путь/test.py'); Для проверки правильности написаного пути попробуйте запустить в консоли с использованием полного пути. Так же проверьте достаточно ли прав для запуска. Так же для проверки правильности пути можете создать файлик test.py с содержимым print("Hello, World!")

→ Ссылка