O script Perl funciona com logs canalizados do Apache, mas não com script Python

1

Eu preciso portar meu script de gerenciamento de log Perl para Python. Aqui está um exemplo simples de um script em Perl que posso usar:

#!/usr/local/bin/perl

$|=1; # Use unbuffered output

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

Como você provavelmente pode ver, estou instruindo o sistema a emitir um bipe sempre que uma solicitação for feita para testar o script. Tudo funciona bem neste, mas quando eu tento um script Python como este:

import sys
import os

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

tudo é executado, mas o sistema não apita após uma solicitação. Aqui estão as linhas que eu estava e estou usando no meu arquivo de configuração do Apache:

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

Estou seguindo este e-mail na lista de e-mails do Python. Alguém tem uma ideia de por que isso não está funcionando?

EDIT: Eu sei que o problema tem algo a ver com "for line in sys.stdin". Por alguma razão, simplesmente não está detectando nada em stdin. Eu não tenho ideia se é meu script python ou minha configuração do apache causando isso, no entanto.

    
por Cory Walker 20.08.2009 / 03:05

2 respostas

1

De onde você está obtendo beep ? Já tentou colocar o caminho completo para este comando beep ?

Editado para adicionar amostra de código.

A última vez que eu hackurei algo em python para ler stdin como um pipe, meu código ficou assim.

#!/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()
    
por 20.08.2009 / 03:55
0

Fruta com baixa qualidade: caminhos, permissões, propriedades.

    
por 20.08.2009 / 04:21