0

我是 HTML 和 Apache 新手。

我当前项目的一部分是制作一个用户界面来从用户那里获取数据,并将其发送到 python 程序进行处理。

我已经开始学习如何做到这一点。我做了一个简单的程序,在屏幕上打印“Hello firstname lastname”。我制作了另一个程序,它使用 HTML 表单操作来获取数据以提交它。

这两个程序的代码是:让我们调用这个文件 second.py

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb

# Create instance of FieldStorage 
form = cgi.FieldStorage()

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print "Content-type:text/html\r\n\r\n"

print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"

要获取数据,请说 form.html :

<form action="/cgi-bin/second.py" method="get">
First Name: <input type="text" name="first_name">  <br />

Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

我正在使用软呢帽。我在计算机上没有超级用户权限。我有另一个运行 apache 服务器的系统(ubuntu),在那里我拥有超级用户权限。


我的问题是,当我在 apache 服务器上运行它时, second.py 可以正常运行 http:// * .*8.1.91/cgi-bin/second.py。给出输出:Hello NoneNone

http://*.*8.1.91/cgi-bin/second.py?first_name=Akhil&last_name=Kulkarni 给出输出:Hello Akhil Kulkarni

这就是它的工作方式。

如果我运行 form.html (http://*.*8.1.91/cgi-bin/second_1.html) ,我会收到 500 Internal Server Error

我在错误日志中收到此错误:

[Wed Jun 12 15:40:07 2013] [error] [client *.*8.5.28] (8)Exec format error: exec of '/usr/lib/cgi-bin/second_1.html' failed
[Wed Jun 12 15:40:07 2013] [error] [client *.*8.5.28] Premature end of script headers: second_1.html

我尝试将它作为 python 程序运行,我得到相同的 500 内部服务器错误错误日志显示:

[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28]   File "
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] /usr/lib/cgi-bin/second_1.py
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] ", line
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] 3
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28]
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28]
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] <form action="/cgi-vin/second.py"method="get">
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28]
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] ^
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] SyntaxError
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] :
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] invalid syntax
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28]
[Wed Jun 12 15:44:48 2013] [error] [client *.*8.5.28] Premature end of script headers: second_1.py

我尝试在每一行前面添加打印命令,就像第一个程序一样。那也没用。


接下来我直接在我的系统上运行这两个,而不是在不同 IP 上的 apache 服务器。这次 form.html 运行完美,我得到了输入数据和提交选项的框,但是现在 second.py 没有在 mozilla 上打开,每次我尝试打开它时,它都会将程序作为可下载文件打开。

所以,表单在我的桌面上工作,而不是 apache 服务器。Disply 脚本不能在我的桌面上运行,但可以在 apache 服务器上运行。如果我使用我的桌面将数据提供给 apache 服务器的显示脚本,它就可以工作。如何使表单在​​服务器上工作,以及在我的桌面上显示脚本?

我花了半天时间绑起来找出问题所在,但徒劳无功。任何帮助将不胜感激。

4

1 回答 1

0

我的问题是,当我在 apache 服务器上运行它时,second.py 可以正常运行 http://*.*8.1.91/cgi-bin/second.py。给出输出:Hello NoneNone

这可能是因为您将表单的方法设置为 get 但它应该是 post。

...但是现在 second.py 无法在 Mozilla 上打开,每次我尝试打开它时,它都会将程序作为可下载文件打开。

浏览器不知道如何处理 .py,因此它建议您下载它。.py 需要由网络服务器提供和运行,因为它知道如何运行和提供信息。

于 2013-06-12T10:37:36.203 回答