subprocess.Popen在nginx中失败

时间:2017-05-07 10:12:07

标签: python nginx flask gunicorn

我正在Raspberry Pi和Rasbian Jessie上使用Flask + gunicorn + nginx开发一个简单的网站。 我坚持用这个Python代码启动一个进程:

def which(program):
    def is_exe(fpath):
        return os.path.isfile(fpath) and os.access(fpath, os.X_OK)

    fpath, fname = os.path.split(program)
    if fpath:
        if is_exe(program):
            return program
    else:
        for path in os.environ["PATH"].split(os.pathsep):
            path = path.strip('"')
            exe_file = os.path.join(path, program)
            if is_exe(exe_file):
                return exe_file

    return None


mplayer_path = which("mplayer")

try:
    player = subprocess.Popen([mplayer_path, mp3], stdin=subprocess.PIPE)
except:
    return render_template('no_mp3s.html', mp3_message=sys.exc_info())

" mp3和#34;是" mplayer_path"是一个mp3文件的路径。是mplayer的绝对路径,由this answer中描述的 函数返回。

当我直接启动flask时,代码在开发中工作。在生产中,当我通过nginx访问网站时,我通过no_mp3s.html模板收到以下错误消息:

  

type' exceptions.AttributeError'
  AttributeError("' NoneType'对象没有属性' rfind'",)
  跟踪对象位于0x7612ab98

我怀疑nginx存在权限问题,但是对Linux很新,我有点迷失了!

编辑: 我应该在我的代码中添加它(适合单个文件)我调用rfind()。另外,我确信错误是在这个特定的try /中捕获的,因为它是唯一输出到no_mp3s.html的错误。

编辑: 根据blubberdiblub的评论,我发现当应用程序在nginx中运行时,哪个功能不起作用。硬编码mplayer的路径似乎有效!

0 个答案:

没有答案