ubuntuusers.de

Python: Wie Ausgabe in Shell-Befehl umleiten?

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

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. ☹

snafu1

(Themenstarter)
Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Aha, jetzt hab ich's geschafft:

sys.stdout.write(thread.encode('utf-8').strip()+'\n')

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Das ginge auch:

print thread.strip().encode('utf-8')

snafu1

(Themenstarter)
Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Jau, hab ich dann auch gemerkt und nur nicht mehr hier reingeschrieben.

Antworten |