在Apache2中:在标头错误调用python脚本之前,脚本输出结束我做错了什么?

问题描述

我在从apache2运行python脚本时遇到问题。 我正处在从完全用python编写的简单网络服务器运行OK三年到使用apache的早期阶段,因此python代码中的许多输入和输出似乎是错误的。 我在Armbian'Buster'上安装的新apache2服务器正确找到了这个index.html

<!DOCTYPE html>
<HTML lang="en">
    <HEAD>
        <Meta charset="utf-8">
        <TITLE> Authentication </TITLE> <br />
    </HEAD>

<H3><big><big> Enter Username and Password
<BODY>
<form action=/cgi-bin/processIndex.py method="post">
    <div>
        <label for="user"> User Name: </label>
        <input maxlength="20" size="20" type="text" id="user" name="user" value="" > <br><br 
/>
        <label for="pass"> Password: &nbsp;&nbsp; </label>
        <input maxlength="40" size="40" type="text" id="pass" name="pass" value="" > <br /> 
<br />
    </div> <br />
    <INPUT TYPE="hidden" name="reverse" value="index.html">
    <INPUT TYPE="hidden" name="retry" value="index.html">
    <INPUT TYPE="hidden" name="forward" value="introduction.html">

    <INPUT TYPE="submit" name="submit" value="Clear"> &nbsp;&nbsp;&nbsp;&nbsp;
    <INPUT TYPE="Submit" name="submit" value="Submit">
</FORM>
</BODY>
</HTML>

填写表格并单击“清除”或“提交”后,我得到 “内部服务器错误页面以及/var/log/apache2/error.log中的此错误

[Tue Nov 10 12:39:23.737425 2020] [cgi:error] [pid 6116] [client 192.168.0.19:56705] /
AH01215: (13)Permission denied: exec of '/var/www/html/cgi-bin/processIndex.py' Failed: / 
/var/www/html/cgi-bin/processIndex.py,referer: http://192.168.0.35:85/

[Tue Nov 10 12:39:23.739415 2020] [cgi:error] [pid 6116] [client 192.168.0.19:56705] /
End of script output before headers: processIndex.py,referer: http://192.168.0.35:85/

[Tue Nov 10 12:40:11.004077 2020] [reqtimeout:info] [pid 4481] /
[client 192.168.0.19:56706] AH01382: Request header read timeout

apache is running by user waterctl
ps aux | grep apache
root      7599  0.0  0.3   6336  3216 ?        Ss   12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7600  0.0  0.2   6244  2200 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7601  0.0  0.2   6360  2204 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7602  0.0  0.2   6360  2204 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7603  0.0  0.2   6360  2204 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7604  0.0  0.2   6360  2204 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7605  0.0  0.2   6360  2204 ?        S    12:52   0:00 /usr/sbin/apache2 -k start
waterctl  7729  0.0  0.0   6728   536 pts/4    S+   12:55   0:00 grep apache

在脚本路径中一直设置适当的权限

ls -al /var/www/html/cgi-bin | grep processIndex
-rwxr-xr-x 1 waterctl waterctl 2433 Nov 10 12:38 processIndex.py

在终端上调用/ usr / bin / python将启动python 3.7解释器 显然,服务器已找到脚本的正确路径。 这是脚本

enter code here
#! /usr/bin/python

"""
<!DOCTYPE text/plain>
"""

#
# processIndex.py
#
import webUtil
from os.path import exists
from time import sleep
#
def pyScript(parent,fields,dummy1,dummy2):
#
    reverse = webUtil.getValue(fields,'reverse')
    submit = webUtil.getValue(fields,'submit')
    if submit == 'Clear':
        webUtil.nxtOp(parent,reverse,dummy1)
        return
    forward = webUtil.getValue(fields,'forward')
    if forward == '': # This stops 404 errors
        forward = '/introduction.htm'
    retry = webUtil.getValue(fields,'retry')
#
# If the configuration file exists,load the name and password
# then check the form data against the cfg data
#
config = webUtil.progAbsPath+webUtil.configName
    if exists(config):
        cfgFile = open(config,'r')
        line = cfgFile.readline()
        cfgFile.close()
        line = line.rstrip('\n')
        cfgList = line.split(':')
#
# cfgUser = cfgList[0] and cfgPassword = cfgList[1]
#         
        user = webUtil.getValue(fields,'user')
        password = webUtil.getValue(fields,'pass')
#
#        print " 'cfgUser' = '"+cfgList[0]+"','cfgPassword' = '"+cfgList[1]+"'"
        if user != cfgList[0] or password != cfgList[1]:
            sleep(15)
            webUtil.errorAndMessage(parent,retry,"both valid user name and password")
            return
        else:
            webUtil.errorAndMessage(parent," configuration data in the setup 
procedure")
        return
#
# This is the first opportunity to load some
# setup info from files,so do it Now.
# Construct a list of activated programs from the crontab file
# because activated programs must not be edited or deleted
#
    cronAbsPath = webUtil.progAbsPath+webUtil.cronTabName
    if exists(cronAbsPath):
        cronFile = open(cronAbsPath,'r')
        cronLine = 'dummy'
        while cronLine != '':
            cronLine = cronFile.readline()
#                print cronLine
            i = -1
            j = 1
            while j >= 0:
                j = cronLine.find('/')
                if j >= 0:
                     i = j
                     cronLine = cronLine[i+1: len(cronLine)]
                cronLine = cronLine[0:len(cronLine)-1]
            if i >= 0 and not cronLine in webUtil.actList:
                webUtil.actList.append(cronLine)
        cronFile.close()
#
# Initialisation done. Now proceed to next web form.
#
    webUtil.nxtOp(parent,forward,dummy1)
    return

我没有正确做些什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)