Назад | Перейти на главную страницу

Сценарий Perl работает с конвейерными журналами Apache, но не с сценарием Python

Мне нужно перенести мой скрипт обработки журналов Perl на Python. Вот простой пример Perl-скрипта, который я могу использовать:

#!/usr/local/bin/perl

$|=1; # Use unbuffered output

while(<>) {
   system("beep");
}

Как вы, наверное, заметили, я говорю системе, что система подает звуковой сигнал всякий раз, когда делается запрос на проверку скрипта. На этом все работает нормально, но когда я пробую такой сценарий Python, как этот:

import sys
import os

for line in sys.stdin:
    os.system('beep')

все работает, но система не подает звуковой сигнал после запроса. Вот строки, которые я использовал и использую в своем файле конфигурации apache:

CustomLog "|perl /var/web/onhit.pl" "onhit"   <-OLD LINE
CustomLog "|python /var/web/onhit.py" "onhit" <-NEW LINE

Я слежу это письмо в списке рассылки Python. У кого-нибудь есть идея, почему это не работает?

РЕДАКТИРОВАТЬ: Я знаю, что проблема связана с «для строки в sys.stdin». По какой-то причине он просто ничего не обнаруживает в stdin. Однако я понятия не имею, причиной этого является мой скрипт python или моя конфигурация apache.

Куда ты идешь писк из? Вы пробовали указать полный путь к этому писк команда?

Отредактировано для добавления образца кода.

В прошлый раз, когда я что-то взломал на Python, чтобы читать stdin как канал, мой код выглядел так.

#!/usr/bin/python
import sys

while 1:
  line = sys.stdin.readline()
  if not line:
    break
  else:
    print >> sys.stdout,  'got: %s' % line.strip()
    sys.stdout.flush()

Низко висящие плоды: пути, разрешения, владения.