Найти - Пользователи
Полная версия: Ошибка при исполнение cgi скрипта
Начало » Python для экспертов » Ошибка при исполнение cgi скрипта
1
Saff
Никак не разберусь в чом трабла:
Есть 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!"
Enchantner
Saff
Может, нету нужных прав у скрипта на сервере?
Saff
Исключено, с этим точно впорядке
igor.kaist
Когда апач выдает 500, полезно заглянуть в логи, часто трейсбек сваливается туда. Что там у тебя?
Saff
Premature end of script headers: gsrv.cgi

При этом скрипт нормально выполняется, если в консоли.
igor.kaist
попробуй до вызова popen, сделать sys.stdout.flush() или print proc.stdout.read() убрать…
bw
> причём именно на 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
igor.kaist
bw, после заголовка (Content-Type: text/html), должнен присутствовать перевод строки, обязательно, далее пустая строка .
bw
Ты меня улыбаешь :-).
Тогда зачем дальше идет print “” ? Я подозреваю, что этот print был поставлен с той же целью, что и \n в предыдущем.

..bw
Enchantner
Saff
попробуй после Popen() поставить proc.wait()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB