Python nginx中的subprocess.Popen失败

Python nginx中的subprocess.Popen失败,python,nginx,flask,gunicorn,Python,Nginx,Flask,Gunicorn,我正在开发一个简单的网站,使用Flask+gunicorn+nginx和Rasbian Jessie一起制作树莓皮。 我一直在使用以下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:

我正在开发一个简单的网站,使用Flask+gunicorn+nginx和Rasbian Jessie一起制作树莓皮。 我一直在使用以下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”是指向mp3文件的路径,“mplayer_path”是指向mplayer的绝对路径,如中所述的函数返回

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

键入“exceptions.AttributeError”
AttributeError(“非类型”对象没有属性“rfind”)
0x7612ab98处的回溯对象

我怀疑nginx存在权限问题,但由于Linux非常新,我有点迷路了

编辑: 我应该补充的是,在我的代码中,没有任何地方可以调用rfind()。另外,我确信这个错误在这个特定的try/except中被捕获,因为它是唯一一个输出到no_mp3s.html的错误

编辑:
在BlubberBlub的评论之后,我发现当应用程序在nginx中运行时,的功能不起作用。硬编码到mplayer的路径似乎是可行的

您试图在哪里调用
rfind()
?那是我首先要看的地方。此外,回溯是否提到行号?如果是的话,那么包含有问题的行和一点上下文可能会有帮助。嗨,我不会在任何地方调用rfind!很明显,有些事情是这样的。可能在不同的模块或包中。在这种情况下,您可能发布了错误的回溯部分。无论如何,您提供的信息可能不足以帮助您。因此您基本上怀疑您发布的第一行返回的是
None
,而不是路径?在这种情况下,
try
-
除了
以及回溯都与问题无关。我不认为链接到一个可能包含问题重要部分的不同问题是回答问题的好方法。请提供一个.Good点,它确实是在nginx中不起作用的which()函数。我仍然不知道为什么,但硬编码mplayer的路径解决了这个问题。您试图在哪里调用
rfind()
?那是我首先要看的地方。此外,回溯是否提到行号?如果是的话,那么包含有问题的行和一点上下文可能会有帮助。嗨,我不会在任何地方调用rfind!很明显,有些事情是这样的。可能在不同的模块或包中。在这种情况下,您可能发布了错误的回溯部分。无论如何,您提供的信息可能不足以帮助您。因此您基本上怀疑您发布的第一行返回的是
None
,而不是路径?在这种情况下,
try
-
除了
以及回溯都与问题无关。我不认为链接到一个可能包含问题重要部分的不同问题是回答问题的好方法。请提供一个.Good点,它确实是在nginx中不起作用的which()函数。我仍然不知道为什么,但硬编码mplayer的路径解决了这个问题。