Python-warten Sie, bis die Daten im sys.stdin

mein problem ist Folgendes:

Mein Python-Skript empfängt die Daten via sys.stdin, aber es muss warten, bis neue Daten verfügbar sind, wird auf sys.stdin.

Wie beschrieben in der manpage von python, habe ich den folgenden code verwenden, aber es ist völlig überlastet meine cpu.

#!/usr/bin/python -u
import sys
while 1:
     for line in sys.stdin.readlines():
         do something useful

Ist es eine gute Art und Weise zu lösen, die eine hohe cpu-Auslastung?

Edit:

Alle Ihre Lösungen funktionieren nicht.
Ich gebe dir genau mein problem.

Können Sie die Konfiguration des apache2-daemon, er sendet jeden logline, um ein Programm und nicht zum schreiben in ein logfile.

Dieser sieht etwas so aus:

CustomLog "|/usr/bin/python -u /usr/local/bin/client.py" combined

Apache2 erwartet von meinem Skript, es läuft immer, wartet auf Daten auf sys.stdin und analysiert Sie dann die Daten.

Wenn ich nur eine for-Schleife verwenden Sie das Skript wird verlassen, denn an einem Punkt gibt es keine Daten in der sys.stdin und apache2 sagen ohh Ihr Skript beendet unerwartet.

Wenn ich mit einer while-true-Schleife mein Skript verwendet 100% cpu-Auslastung.

Es klingt wie Ihr problem liegt woanders dann. In der python-Skript ist es egal, ob es Daten in stdin, nur so lange, wie es geöffnet ist. Was ist schriftlich an das python-Skript, die Schließung der stream vorzeitig.
Zunächst sollten Sie sich bewusst sein, der Unterschied zwischen readline() und readlines(). readlines() liest alle Eingaben von stdin bis EOF (im Grunde Berufung read() dann teilen durch newline). Das heißt, Sie kommen für die erste Zeit, wenn stdin geschlossen wurde. Künftige Aufrufe readlines() (oder read() und readline()) auf stdin zurück [] (oder "" für read/readline). Empfohlene Lektüre: docs.python.org/2/tutorial/inputoutput.html unix.stackexchange.com/questions/103885/...

InformationsquelleAutor Abalus | 2011-08-14

Schreibe einen Kommentar