Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2009 15:52:22

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Никак не разберусь в чом трабла:
Есть cgi скрипт, работает через апач.
При его вызове выпадает internal server error, причём именно на subprocess.popen…
Почему?

import os
import subprocess
print "Content-type: text/html\n"
print ""

print "Start...<br>"
try:
proc = subprocess.Popen(['/bin/ls','-l'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
except Exception,err:
print err
print proc.stdout.read()
print "Done!"



Офлайн

#2 Авг. 21, 2009 16:21:00

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Saff
Может, нету нужных прав у скрипта на сервере?



Офлайн

#3 Авг. 21, 2009 16:33:54

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Исключено, с этим точно впорядке



Офлайн

#4 Авг. 21, 2009 16:55:24

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Когда апач выдает 500, полезно заглянуть в логи, часто трейсбек сваливается туда. Что там у тебя?



Офлайн

#5 Авг. 21, 2009 17:10:12

Saff
От:
Зарегистрирован: 2008-03-18
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Premature end of script headers: gsrv.cgi

При этом скрипт нормально выполняется, если в консоли.



Отредактировано (Авг. 21, 2009 17:13:09)

Офлайн

#6 Авг. 21, 2009 17:42:38

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

попробуй до вызова popen, сделать sys.stdout.flush() или print proc.stdout.read() убрать…



Офлайн

#7 Авг. 22, 2009 01:28:02

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Ошибка при исполнение cgi скрипта

> причём именно на subprocess.popen
Т.е. без popen всё работает?
Так будет логичнее, как считаешь:

try:
proc = subprocess.Popen(['/bin/ls', '-l'], stdin = subprocess.PIPE, stdout = subprocess.PIPE)
except Exception, err:
print err
else:
print proc.stdout.read()
Было что-то подобное, но очень давно.

Общие рецепты (на всякий случай):
1. Хотя это не может быть причиной, но зачем перевод строки (\n) в первом print?
2. А если написать "Content-Type: text/html“?
3. Попробуй поставить пустую строку в конце скрипта.
4. Возможно серверу не нравится присутствие \t (0x0d, 10) в конце каждой строки твоего скрипта, если он есть, конечно. Или же наоборот - он нужен.
5. Попробуй первой строкой в скрипте поставить ”#!/usr/bin/python“, ”#!/usr/bin/env python" или что-нибудь в этом духе.
6. Попробуй спросить у хостера, мне иногда помогало.

..bw



Офлайн

#8 Авг. 22, 2009 09:03:45

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

bw, после заголовка (Content-Type: text/html), должнен присутствовать перевод строки, обязательно, далее пустая строка .



Офлайн

#9 Авг. 22, 2009 12:13:56

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Ошибка при исполнение cgi скрипта

Ты меня улыбаешь :-).
Тогда зачем дальше идет print “” ? Я подозреваю, что этот print был поставлен с той же целью, что и \n в предыдущем.

..bw



Офлайн

#10 Авг. 22, 2009 12:34:15

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при исполнение cgi скрипта

Saff
попробуй после Popen() поставить proc.wait()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version