Naja, der eine oder andere wird ja inzwischen etwas von meinem kleinen "Projekt" mitbekommen haben, an dem ich mich so nach und nach immer weiterhangel...Das aktuelle Problem ist folgendes: Ich lasse die Threads mittels print ausgeben und würde die ganze Sache gerne durch eine Pipe jagen können, um mittels grep nach Wörtern im Titel zu suchen.
python cp.py 1 | grep bla
...soll eine Seite ausgeben und nach bla suchen. Jedoch erhalte ich als Meldung:
File "cp.py", line 22, in <module> print thread.strip() UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 5: ordinal not in range(128)
Ich habe statt print schon sowas probiert, weil ich dachte, dass er die Ausgabe dann vielleicht anders verarbeitet:
sys.stdout.write(thread.strip())
...was aber anstatt zum Erfolg, zur selben Fehlermeldung führte. Hier mal der gesamte Code. Ich vermute ja jetzt eher, dass Python dieses | grep bla als weitere Argumente versteht und somit die Bash sozusagen gar nichts davon mitkriegt. Kann man Python irgendwie mitteilen: Lies genau ein Argument aus und lass den Rest für die Bash über?
EDIT: Dies funktioniert jedoch:
import sys sys.stdout.write('bla\n') sys.stdout.write('bla\n') sys.stdout.write('blupp\n')
$ python test.py | grep blupp blupp
Mir ist aufgefallen, dass das Zeichen nach der 5ten Position ein ö ist. Kann es sein, dass er damit nicht klar kommt? Wenn ja: Wie bring ich ihn dazu, nicht über die Umlaute zu stolpern?
EDIT2:
Das funktioniert:
output = thread.encode('utf-8').strip() sys.stdout.write(output)
Allerdings mag er jetzt das \n nicht, so dass ich eine Ausgabe ohne Zeilenumbrüche erhalte. ☹