Perl 脚本适用于 Apache 管道日志,但不能用于 Python 脚本

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 邮件列表中。有人知道为什么这不起作用吗?

编辑:我知道问题与“for line in sys.stdin”有关。出于某种原因,它只是没有检测到 stdin 中的任何内容。不过,我不知道是我的 python 脚本还是我的 apache 配置导致了这个问题。

答案1

你从哪里得到来自?你试过输入这个的完整路径吗?命令?

编辑以添加代码示例。

上次我在 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()

答案2

唾手可得的成果:路径、权限、所有权。

相关内容