Различные результаты при вызове скрипта Python из командной строки или на веб-сервере - PullRequest
0 голосов
/ 02 марта 2011

Я пишу скрипт на python для запуска на веб-сервере apache.Моя первая цель - перечислить доступные сетевые интерфейсы и после этого создать для каждого из них форму для ввода некоторых параметров, представляющих интерес.Моя проблема в том, что когда я запускаю следующий скрипт из командной строки, я получаю ожидаемый результат (отформатированную html-страницу с формами), когда я оцениваю его из Интернета, то есть помещаю скрипт на свой веб-сервер и удаленнодоступ к нему через http://myipaddr/cgi-bin/myscript.py, я получаю только кнопку отправки, а не формы.

#!/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()

Я искал похожую проблему, но не смог найти ничего похожего в Интернете.Скорее всего, я делаю что-то глупое, но я не могу понять это сам.Я был бы очень рад, если бы кто-нибудь указал мне верное направление.

Приветствия, бман

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Попробуйте закомментировать Popen и замените result фиктивными значениями. Если Popen вызывает проблему (как я подозреваю), вы, вероятно, захотите получить значения не так, как через канал stdout.

0 голосов
/ 02 марта 2011

Возможно, запущены разные версии python. Проверьте, использует ли ваш пользователь ssh и пользователь веб-сервера (www) один и тот же питон с одного и того же пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...