从命令行或web服务器调用python脚本时会产生不同的结果

从命令行或web服务器调用python脚本时会产生不同的结果,python,forms,cgi,Python,Forms,Cgi,我正在编写一个在ApacheWeb服务器上运行的python脚本。我的第一个目标是列出可用的网络接口,然后为每个接口构建一个表单来输入一些感兴趣的参数。我的问题是,当我从命令行运行以下脚本时,我得到了预期的结果(一个带表单的格式化html网页),而如果我从web评估它,即将脚本放入web服务器并通过http://myipaddr/cgi-bin/myscript.py,我只得到提交按钮,没有表格 #/usr/bin/python #导入所需模块 进口稀土 导入cgi 从子流程导入* var=Po

我正在编写一个在ApacheWeb服务器上运行的python脚本。我的第一个目标是列出可用的网络接口,然后为每个接口构建一个表单来输入一些感兴趣的参数。我的问题是,当我从命令行运行以下脚本时,我得到了预期的结果(一个带表单的格式化html网页),而如果我从web评估它,即将脚本放入web服务器并通过
http://myipaddr/cgi-bin/myscript.py
,我只得到提交按钮,没有表格

#/usr/bin/python
#导入所需模块
进口稀土
导入cgi
从子流程导入*
var=Popen(“ifconfig”,stdout=PIPE,shell=True)
结果=re.findall(“wlan[1-9]”,变量)
def DisplayForm():
HTMLFormL1='\n\n接口:

\n' HTMLFormL2='要发送的数据包数:

\n' HTMLFormL3='传输通道:

\n' HTMLFormL4='使用中的睡眠时间:




\n' HTMLForm=HTMLFormL1+HTMLFormL2+HTMLFormL3+HTMLFormL4 HTMLStart='\n\n' 对于范围内的num(len(result)): HTMLForm_idx=HTMLForm%(num,num,num,num) HTMLStart=“%s%s”%(HTMLStart,HTMLForm_idx) HTMLBody=HTMLStart+'\n

\n\n' 打印“内容类型:text/html\n\n” HTMLHeader='\n\n\n\nCAOS\n\n' HTMLFooter='\n' 打印HTMLHeader 打印HTML正文 打印HTMLFooter #---“main”的开头 form=cgi.FieldStorage() 尝试: 键=形式[“键”]。值 除: 键=无 如果是钥匙!=“过程”: DisplayForm()

我已经寻找了一个类似的问题,但我在网上找不到任何类似的问题。很可能我在做一些愚蠢的事情,但我自己却无法理解。如果有人能给我指出正确的方向,我会非常高兴

干杯,
bman

可能正在运行不同版本的python。
检查您的ssh用户和web服务器用户(www)是否从相同路径运行相同的python。

尝试注释掉
Popen
,并用模拟值替换
result
。如果Popen导致了问题(我怀疑),您可能希望以与通过标准管道不同的方式获取值。

检查web服务器错误日志,查看是否有任何Python运行时错误。
#!/usr/bin/python
# import required modules
import re
import cgi
from subprocess import *

var=Popen("ifconfig", stdout=PIPE, shell=True).stdout.read()
result = re.findall("wlan[1-9]", var)

def DisplayForm():

    HTMLFormL1= '\n\nInterface:<BR> <INPUT TYPE=TEXT NAME="interface%d" size=60><BR>\n'
    HTMLFormL2= 'Number of packets to send:<BR> <INPUT TYPE=TEXT NAME="npackets%d" size=60><BR>\n'
    HTMLFormL3= 'Transmission channel:<BR> <INPUT TYPE=TEXT NAME="channel%d" size=60><BR>\n'
    HTMLFormL4= 'Sleep time in usec:<BR> <INPUT TYPE=TEXT NAME="sleeptime%d" size=60><BR><BR><BR>\n'

    HTMLForm = HTMLFormL1 + HTMLFormL2 + HTMLFormL3 + HTMLFormL4

    HTMLStart = '<FORM METHOD="POST" ACTION="caos.py">\n<INPUT TYPE=HIDDEN NAME="key" VALUE="process">\n'

    for num in range(len(result)):
        HTMLForm_idx = HTMLForm % (num, num, num, num)
        HTMLStart = "%s%s" % (HTMLStart, HTMLForm_idx)

    HTMLBody = HTMLStart + '\n<BR><P><INPUT TYPE="SUBMIT" VALUE="Configure">\n</FORM>\n'

    print "Content-Type: text/html\n\n"
    HTMLHeader ='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\n<html>\n<head>\n<META NAME="keywords" CONTENT="blah blah -- your ad here">\n<title>CAOS</title>\n</head>\n<body>'
    HTMLFooter ='</body>\n</html>'
    print HTMLHeader
    print HTMLBody
    print HTMLFooter


#--- Begin of "main"
form = cgi.FieldStorage()
try:
    key = form["key"].value
except:
    key = None
if key != "process":
    DisplayForm()