sh: 1: программа, не найденная, происходит, когда выполнение команды Terminal с помощью Python, но непосредственно ввод команды в Терминале хорошо работает

Я испытываю очень странную проблему. Я сделал веб-сайт, и у меня есть проблема с бэкендом. Это работает на сервере Ubuntu 18.04. Бэкенд записан в Python и Фляге (микро веб-платформа). Я создал Nginx и Gunicorn, поскольку не рекомендуется использовать встроенный сервер разработки Фляги.

Я создал Nginx и Gunicorn правильно с помощью этого руководства. Это не проблема. Мой веб-сайт является аудио преобразователем, который использует FFmpeg и различные кодеры, такие как ЛАМЕ. Таким образом, это требует, чтобы команды были выполнены в Терминале. Как пример, когда Python пытается сделать:

os.system('wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3')

Я вижу следующую ошибку в журналах:

gunicorn[2311]: sh: 1: lame: not found
gunicorn[2311]: sh: 1: wine: not found

Я даже попытался использовать подпроцесс вместо os.system, с помощью следующей команды:

subprocess.run('wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3', shell=True)

Но я получаю те же ошибки.

Вещь, к Ламе и вину можно получить доступ прекрасные. И подтверждать мою точку зрения, если я выполняю ту же самую команду непосредственно в Терминале, т.е.:

wine ~/.wine/drive_c/ffmpeg.exe -i "1.wav" -ac 2 -vn -f wav - | lame -b 320 - "12345".mp3

Я не получаю ошибок и 1.wav, файл успешно преобразовывается в MP3.

Почему я получаю те ошибки, когда Python пытается выполнить те команды?

** РЕДАКТИРОВАНИЕ: я думал, и возможно это - проблема: Gunicorn был создан в виртуальной среде, когда я следовал этому учебному руководству. ЛАМЕ и Вино не могли бы установленный в виртуальной среде? Возможно, вот почему, когда я запускаю свое приложение Python/фляги с Gunicorn, оно не знает, каковы они? Существует ли способ, которым я могу проверить ли дело обстоит так?

1
задан 6 February 2020 в 00:44

2 ответа

Как я думал, что может иметь место, проблема происходила из-за Gunicorn, устанавливаемого в виртуальной среде. Я удалил Gunicorn и на этот раз пропустил шаги в руководстве, которые настраивают виртуальную среду прежде, чем переустановить Gunicorn. Я также изменил myproject.service файл от этого:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/myproject/myprojectenv/bin"
ExecStart=/home/ubuntu/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

к этому:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
ExecStart=/home/ubuntu/myproject/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

Теперь я просто должен ожидать Google Domains для соединения IP сервера к моим доменам, которые являются freeaudioconverter.net и onlineaudioconverter.net

0
ответ дан 20 February 2020 в 23:00

Вы также можете добавить дополнительный путь к PATH в среде [Service]. Это также работает для uwsgi.

[Service]
Environment="PATH=/home/ubuntu/myproject/myprojectenv/bin:/usr/bin"
1
ответ дан 12 September 2020 в 04:28

Другие вопросы по тегам:

Похожие вопросы: