
leet-speak
@Xynon1: Wenn da nicht das gleiche heraus kommt, dann ist das Programm irgendwo kaputt, oder!?
Ok, folgendes stellt mich noch vor eine Wand. Wie kann ich feststellen ob bei "sys.stdin" schon etwas beim Aufruf des Programms anliegt?
Denn ich würde gerne auch einen "normalen" Aufruf ermöglichen, so dass man wenn das Programm schlicht mit "python leet.py" aufgerufen wird, immer noch eine Abfrage einer Eingabe kommt. Momentan ist halt das Problem, wenn ich es wie in Leonidas Beispiel aufrufe alles was auf "sys.stdout" gelegt wird, ja auch an den Zweiten Aufruf übergeben wird, also auch die einfachen Eingabeaufforderungen.
Denn ich würde gerne auch einen "normalen" Aufruf ermöglichen, so dass man wenn das Programm schlicht mit "python leet.py" aufgerufen wird, immer noch eine Abfrage einer Eingabe kommt. Momentan ist halt das Problem, wenn ich es wie in Leonidas Beispiel aufrufe alles was auf "sys.stdout" gelegt wird, ja auch an den Zweiten Aufruf übergeben wird, also auch die einfachen Eingabeaufforderungen.
Ungewöhnliches Verhalten, aber du kannst mittels `select.select()` herausfinden, ob Daten in einem Stream darauf warten, verarbeitet zu werden:
Falls du Windows benutzt, wirst du allerdings einen anderen Weg gehen müssen, weil `select()` dort nur für Sockets, nicht aber für Dateiobjekte funktioniert.
Code: Alles auswählen
import select
import sys
def main():
r,w,x = select.select([sys.stdin], [], [], 0)
if r:
print 'stdin: %r' % r[0].read()
else:
print 'no contents in stdin'
if __name__ == '__main__':
main()
Code: Alles auswählen
urx@murx:~$ python test.py
no contents in stdin
urx@murx:~$ echo "foobar" | python test.py
stdin: 'foobar\n'
Hehe, so weit war ich gerade auch, dank deinem Tipp "select.select" und wollte gerade Fragen, wie man das unter Windows macht ?
Ansonsten funktioniert select prima.
Hast du für Windows auch noch einen Anstoß ?

Ansonsten funktioniert select prima.

Hast du für Windows auch noch einen Anstoß ?