为什么运行python脚本会导致Apache出错

时间:2014-01-11 22:03:40

标签: python linux apache raspberry-pi

通过网站运行以下python脚本可以正常工作(如预期的那样)停止MPD的播放:

#!/usr/bin/env python
import subprocess
subprocess.call(["mpc", "stop"])
print ("Content-type: text/plain;charset=utf-8\n\n")
print("Hello") 

然而,此脚本会导致错误(播放按预期开始):

#!/usr/bin/env python
print("Content-type: text/plain;charset=utf-8\n\n")
print ("Hello")

import subprocess
subprocess.call(["mpc", "play"])

错误是:

malformed header from script. Bad header=Scorpions - Eye of the tiger -: play.py, referer: http://...

显然,播放命令返回的内容都被视为标题。在终端中运行时,输出看起来很好。为什么会这样?

2 个答案:

答案 0 :(得分:2)

  1. 您正在某种类似CGI的环境中运行脚本。我强烈建议使用像Flask或Bottle这样的轻型Web框架。
  2. mpc play正在写信给stdout。你需要保持沉默:

    import os
    
    with open(os.devnull, 'w') as dev_null:
        subprocess.call(["mpc", "stop"], stdout=dev_null)
    
  3. 要使您的HTTP标头生效,您需要将其与\r\n分开,而不是\n\n

答案 1 :(得分:0)

您需要使用\r\n行结尾。