Seite 1 von 1

sys.stdin.readline() - kommisches Problem

Verfasst: Mittwoch 20. Mai 2009, 11:38
von PNS-Richi
Hallo,

ich hab mir vor längerem zwei url_redirector/url_rewriter für squid programmiert.
Der neuer macht komische Probleme, also hab ich mir ein mini Python Script geschrieben um heraus zu finden warum dieser solche Probleme macht bzw. was Squid eigentlich so weiter sendet.

Code: Alles auswählen

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys

sys.stderr = open("/tmp/squid.stderr","a")

output_file = open("/tmp/squid.test", "a")

while True:

	line = sys.stdin.readline().strip()

	output_file.write("FROM SQUID: " + line + "\n")
		
	tmp = line.split(' ')
		
	if len(tmp) < 2:
		continue

	sys.stdout.write(tmp[0] + " \n")
	sys.stdout.flush()

output_file.close()
In der Log Datei steht nun folgendes:

Code: Alles auswählen

FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
FROM SQUID:
Also bekommt mein Script und die anderen rewriters nur eine Leere Zeile. Hab ich was falsch gemacht mit dem auslesen des stdin, oder passt was mit Squid nicht? Das Problem ist, das das System dann auf 100% ausgelastet ist!

lg Richi

Verfasst: Mittwoch 20. Mai 2009, 11:58
von Dill
ich hab zwar keine ahnung, was squid ist, aber seltsam ist das ja schon.

was passiert wenn du das strip() weglässt? du scheinst ja nur whitespace zu lesen.

du hast squid.stderr explizit an sys.stderr gebunden. gibts evtl auch ein squid.stdout das du binden musst?

Verfasst: Mittwoch 20. Mai 2009, 13:24
von PNS-Richi
Squid ist eine HTTP Proxy und mithilfe von anderen Programmiersprachen kann man sogenannte "redirectors" schreiben.

Jede anfrage wird an den redirector weiter geleitet, dieser kann dann die url überprüfen, ob diese z.b. eine Porno Seite, oder eine andere nicht gewünschte Seite ist und eine alternative URL zurück liefern.

Squid kennt dabei: url_redirector und url_rewriter.

Bei dem rewriter kann man threads anwenden, als Konzept. Verwende ich den redirector macht es keine Probleme. Ich werd nochmal bei der Squid Seite nach gucken ob man etwas beachten muss, oder ob ein Bug bekannt ist.

lg Richi