for line in text - wird byteweise gelesen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

for line in text - wird byteweise gelesen ?

Beitragvon stefan3003 » Freitag 22. Dezember 2006, 19:36

Hallo,

ich habe gerade das hier verbrochen:

Code: Alles auswählen

import os
sshline="ssh stefan@meinhost -i /home/stefan/id_dsa cat /home/stefan/fdisk.txt"
stdout_handle = os.popen(sshline, "r")
text = stdout_handle.read()
for line in text:
    print line


Bei dem "print line" wird mir aber jedes Byte einzeln ausgegeben, ich hatte ansich die ganze Zeile erwartet ;-(

Was ist der richtige Weg um die ganze Zeile in 'line' zu haben ? Warum wird hier byteweise ausgegeben (die Datei "fdisk.txt" is ganz normales ASCII) ?

Gruß + vielen Dank schonmal,
Stefan
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: for line in text - wird byteweise gelesen ?

Beitragvon Leonidas » Freitag 22. Dezember 2006, 19:57

stefan3003 hat geschrieben:Bei dem "print line" wird mir aber jedes Byte einzeln ausgegeben, ich hatte ansich die ganze Zeile erwartet ;-(

Warum? Was erwartest du denn bei

Code: Alles auswählen

In [9]: for element in "abc":
    ...:     print element

Ich erwarte da einzelne Zeichen. Es kommen tatsächlich einzelene Zeichen, hurra. Mit .read() bekommst du einen String und wenn du über einen String iterierst, bekommst du nun mal einzelne Zeichen.

stefan3003 hat geschrieben:Was ist der richtige Weg um die ganze Zeile in 'line' zu haben ? Warum wird hier byteweise ausgegeben (die Datei "fdisk.txt" is ganz normales ASCII) ?

Der richtige weg wäre

Code: Alles auswählen

for line in stdout_handle:
    print line

also direkt über das Handle zu iterieren, statt über den String.

Persönlich würde ich aber lieber dazu das Subprocess-Modul verwenden:

Code: Alles auswählen

import subprocess
ssh_call = 'ssh stefan@meinhost -i /home/stefan/id_dsa cat /home/stefan/fdisk.txt'.split()
proc = subprocess.Popen(ssh_call, stdout=subprocess.PIPE)
for line in proc.stdout:
    print line
My god, it's full of CARs! | Leonidasvoice vs Modvoice
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

Re: for line in text - wird byteweise gelesen ?

Beitragvon stefan3003 » Freitag 22. Dezember 2006, 20:00

Leonidas hat geschrieben:Persönlich würde ich aber lieber dazu das Subprocess-Modul verwenden:

Code: Alles auswählen

import subprocess
ssh_call = 'ssh stefan@meinhost -i /home/stefan/id_dsa cat /home/stefan/fdisk.txt'.split()
proc = subprocess.Popen(ssh_call, stdout=subprocess.PIPE)
for line in proc.stdout:
    print line


Super! Vielen Dank! :)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]