web-dev-qa-db-ja.com

sh:1:Python経由でターミナルコマンドを実行すると、プログラムが見つかりませんでしたが、ターミナルに直接コマンドを入力すると問題なく動作します

非常に奇妙な問題が発生しています。ウェブサイトを作成しましたが、バックエンドに問題があります。 Ubuntu 18.04サーバーで実行されています。バックエンドは、PythonおよびFlask(マイクロWebフレームワーク)で記述されています。NginxとGunicornを設定しました。Flaskの組み込み開発サーバーで。

このガイド を使用して、NginxとGunicornを正しく設定しました。これは問題ではありません。私のウェブサイトはFFmpegとLAMEなどのさまざまなエンコーダーを使用するオーディオコンバーターです。そのため、ターミナルでコマンドを実行する必要があります。例として、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は仮想環境でセットアップされました このチュートリアル 。 LAMEとWineが仮想環境にインストールされていない可能性がありますか?たぶんそれが、Python/FlaskアプリをGunicornで実行するとき、それが何であるかわからないのはなぜですか?これが事実かどうかを確認する方法はありますか?

1
TheAudiophile

どうなるかと思ったら、仮想環境に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です。

0
TheAudiophile