2013-10-23 199 views
5

我在使用Lighttpd和cgi-bin执行python脚本时遇到问题。我在stackoverflow(即Lighttpd and cgi python)和其他网站中发现了类似的问题,但没有一个完全与我的配置有关。我可以通过发出“python flash.py”而没有任何问题来执行独立的python脚本。使用Lighttpd和CGI执行Python脚本

可能有助于解决这个问题的一个关键点是,在我运行“apt-get update”和“apt-get upgrade”之前,一切工作正常。我尝试过对特定文件的权限进行混淆,并对配置文件进行了修改,但都没有帮助。

我已经把所有事情都回到刚刚运行更新后的状态。这对我来说是新的领域,我只是没有足够的教育去找到任何明显的东西。就目前来看,这是我目前的配置。

/etc/lighttpd/lighttpd.conf

server.modules = (
     "mod_access", 
     "mod_alias", 
     "mod_compress", 
     "mod_redirect", 
#  "mod_auth", 
#  "mod_rewrite", 
) 

server.document-root  = "/var/www" 
server.upload-dirs   = ("/var/cache/lighttpd/uploads") 
server.errorlog    = "/var/log/lighttpd/error.log" 
server.pid-file    = "/var/run/lighttpd.pid" 
server.username    = "www-data" 
server.groupname   = "www-data" 
server.port     = 80 


index-file.names   = ("index.php", "index.html", "index.lighttpd.html") 
url.access-deny    = ("~", ".inc") 
static-file.exclude-extensions = (".php", ".pl", ".fcgi") 

compress.cache-dir   = "/var/cache/lighttpd/compress/" 
compress.filetype   = ("application/javascript", "text/css", "text/html", "text/plain") 

# default listening port for IPv6 falls back to the IPv4 port 
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port 
include_shell "/usr/share/lighttpd/create-mime.assign.pl" 
include_shell "/usr/share/lighttpd/include-conf-enabled.pl" 

#auth.backend = "plain" 
#auth.backend.plain.userfile = "/etc/lighttpd/.lighttpdpwd" 

#auth.require = ("/var/www" => 
#(
#.method. => "basic", 
#.realm. => "Authentication required", 
#.require. => "user=admin" 
#) 
#) 

等/ lighttpd的/启用的conf-/ 10 cgi.conf

# /usr/share/doc/lighttpd/cgi.txt 

server.modules += ("mod_cgi") 

$HTTP["url"] =~ "^/cgi-bin/" { 
     cgi.assign = (".py" => "/usr/bin/python") 
} 

## Warning this represents a security risk, as it allow to execute any file 
## with a .pl/.py even outside of /usr/lib/cgi-bin. 
# 
#cgi.assign  = (
#  ".pl" => "/usr/bin/perl", 
#  ".py" => "/usr/bin/python", 
#) 

在/ var/WWW/cgi-bin目录/闪光。 PY

#Dog Treat Dispenser. Flash Code 
import RPIO 
import time 
import cgi 

FLASHER = 22 
#ADD CLICKER! 

RPIO.setup(FLASHER , RPIO.OUT) #Set FLASHER pin as OUTPUT 

for x in range(0, 5):     #Flash for 2 seconds 

     RPIO.output(FLASHER, True) 

     #ADD CLICKER SUBROUTINE 
     time.sleep(.500) 

     RPIO.output(FLASHER, False) 

     #ADD CLICKER SUBROUTINE 
     time.sleep(.500) 

# reset every channel that has been set up by this program, 
# and unexport interrupt gpio interfaces 
RPIO.cleanup() 

print "Content-Type: text/html" 
print "Location: http://10.143.141.164" 
print 
print "<html><head>" 
print "<title>Flash!</title>" 
print "</head>" 
print "<body>" 
print "<h1>Flash!</h1>" 
print "</body>" 
print "</html>" 

做一吨的研究,还是一无所获后,我在一个损失。任何帮助你可以提供将不胜感激。如果有什么我错过了,请告诉我,我会尽我所能把它交给你。

谢谢!

回答

2

这应该工作:

server.modules += ("mod_cgi") 

cgi.assign = (".pl" => "/usr/bin/perl", 
        ".py" => "/usr/bin/python") 

你运行的Python版本的?你升级并安装python3吗?如果是这样,您将需要安装python2,并将/usr/bin/python更改为/usr/bin/python2

您是否在Lighttpd的mimetypes.conf文件中为python设置了mimetypes?它应该看起来像这样:

".py" => "text/x-python", 
".pyc" => "application/x-python-code", 
".pyo" => "application/x-python-code", 

在进行任何更改之前是否检查了lighttpd的错误日志?日志存储在/var/log/lighttpd/error.log

你有什么确切的问题?当您导航到目录时,文件是否尝试下载?没有更多信息,这很难排除故障。

0

OP提到把脚本/var/www/cgi-bin/flash.py,而我的系统(Ubuntu的值得信赖的),我把脚本目录/usr/lib/cgi-bin/script.py和使用URL通过浏览器访问它们:http://localhost/cgi-bin/script.py

在anycase,我降落在这太问题,而试图使lighttpd的CGI Python脚本工作,所以把这个信息作为参考 - 否则,@多洛雷斯的答案应该足够了 - 又在我的情况下,配置为

$HTTP["remoteip"] =~ "127.0.0.1" {  
    alias.url += ("/cgi-bin/" => "/usr/lib/cgi-bin/") 
    $HTTP["url"] =~ "^/cgi-bin/" { 
    cgi.assign = (".sh" => "/bin/sh") 
    } 
} 

如放在/etc/lighttpd/conf-enabled/10-cgi.conf ,使用CMD使CGI模块:lighty-enable-mod cgi,然后使用CMD做的lighttpd的重载:/etc/init.d/lighttpd force-reload

以下是script.py

import time 
print("Content-Type: text/html\n\n") # html markup follows 

timeStr = time.strftime("%c") # obtains current time 

htmlFormat = """ 
<html> 
<Title>The Time Now</Title> 
<body> 
<p>The current Central date and time is: {timeStr}</p> 
</body> 
</html> """ 

print(htmlFormat.format(**locals())) # see embedded %s^above