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.
Antworten
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
stefan3003
User
Beiträge: 17
Registriert: Montag 27. November 2006, 11:39

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! :)
Antworten