Мне нужно перенести мой скрипт обработки журналов 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()
Низко висящие плоды: пути, разрешения, владения.