FileNotFoundError:[Errno 2] 没有这样的文件或目录

获取FileNotFoundError: [Errno 2] No such file or directory: 'bash'错误而运行我gunicorn Python应用程序的形式。服务文件。


但是,单独运行 gunicorn 命令(不是从 .service 文件)运行正常。


运行应用程序的 gunicorn 命令


gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 --bind <server_ip>:8080 wsgi

app.service 文件


[Service]

User=user

WorkingDirectory=/home/user/app

Environment="PATH=/home/user/app/app_venv/bin"

ExecStart=/home/user/app/app_venv/bin/gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker --workers 1 --bind <server_ip>:8080 wsgi

生成错误的 Python 代码


import subprocess


cmd = ['bash', 'script.sh' , args.get('arg')]

try:

    process = subprocess.Popen(cmd,

                               cwd=/path/to/bash_script,

                               stdout=subprocess.PIPE,

                               stderr=subprocess.STDOUT,

                               universal_newlines=True)

    while process.poll() is None:

        output = process.stdout.readline()

        if(output==''):

            break

        emit('tg_output', output)


except subprocess.CalledProcessError as error:

    pass


慕的地6264312
浏览 529回答 2
2回答

叮当猫咪

IMObash命令不在用户PATH 中。最好始终使用bash命令的完整路径。cmd&nbsp;=&nbsp;['/bin/bash',&nbsp;'script.sh'&nbsp;,&nbsp;args.get('arg')]使用which bash获得的完整路径。

MYYA

您明确设置Environment="PATH=/home/user/app/app_venv/bin"您需要PATH包含要使用的任何外部二进制文件的所有目录(实际上,如果您无论如何都通过完整路径运行它,则不需要真正包含脚本的目录;所以最好的解决方案可能只是PATH从文件中完全删除此分配)。您的 Bash 脚本似乎不需要 Python 来运行它,并且您创建的用于运行它的 Python 包装器似乎有错误(特别是,毯子except看起来令人不安);也许更好的解决方案是完全运行一个单独的 Bash 进程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python