2 Leerzeilen eingeschlichen, brauche Hilfe dies auszumerzen.

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.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

2 Leerzeilen eingeschlichen, brauche Hilfe dies auszumerzen.

Beitragvon akis.kapo » Montag 4. September 2006, 16:07

Code: Alles auswählen

#!/usr/bin/python -O

from subprocess import Popen, PIPE, STDOUT


dirlist = Popen(('ls', '-lh'), stdout=PIPE, stderr=STDOUT)

namelist = Popen(('awk', '{print $8}'), stdout=PIPE, stderr=STDOUT, stdin=dirlist.stdout)

outstring = ''
for line in namelist.stdout:
    outstring += line

print outstring


Dieses kleine Programm gibt die Datei/Verzeichnisnamen aus mithilfe einer Pipe (das wollte ich in diesem Beispiel lernen, habs auch...) nur ist die erste und die letzte Zeile leer.

Woher kommt das und wie kann ichs verhindern?

Bei der letzten leer-Zeile hab ich ne Idee => print
Aber ich kann mir nicht denken wo die erste her kommt.
Ich denke mal am outstring = '' kanns nicht liegen, bin mir aber nicht sicher.
Irgendwo muss ich den outstring ja erzeugen, bevor ich ihn recursiv definiere "+="...

Kein Plan, bin offen für eure Meinungen.
BlackJack

Beitragvon BlackJack » Montag 4. September 2006, 17:05

Das ist kein Python-Problem. Wenn Du die Pipe auf der Shell ausführst hast Du auch eine führende Leerzeile. Ganz einfach weil ls -lh als erstes die Gesamtgrösse auf der ersten Zeile ausgibt und Du von diesen zwei "Feldern" das achte nimmst, also ein Leeres "Feld".

Code: Alles auswählen

marc@s8n:~$ ls -lh|head -n3
total 388M
-rw-r--r--  1 marc marc  8.6M 2006-07-02 09:47 20050422164643515_lpp-1.1.7-27-i386.tar.gz
-rw-r--r--  1 marc marc   12M 2006-06-27 00:30 2006-06-26.mov
marc@s8n:~$ ls -lh|awk '{print $8}'|head -n3

20050422164643515_lpp-1.1.7-27-i386.tar.gz
2006-06-26.mov


Warum löst Du das Problem nicht komplett in Python? Alles nötige gibt's im `os` und `os.path` Modul.
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Montag 4. September 2006, 20:41

Bitte glaub mir das _das_ nicht mein Problem war.
Ich wollte einfach nur Popen in Python ausprobieren,
weil ich es nie angewandt habe, auch nicht unter C...

Die erste Leerzeile ist also nun erklärt => danke.
Die letzte versteh ich nach wie vor nicht.

Wie gibt man eigentlich unter Python einen Raw String aus? (Ohne "print")
In Java gibts ja System.out.println (immer '\n' am Ende) und System.out.print (kommt auf String an).
Wie ist denn das Python-pendant zu letzterem Aufruf?

" '%s' % outstring"...
Habe ich schon probiert und da kommt garnix mehr raus.
BlackJack

Beitragvon BlackJack » Montag 4. September 2006, 21:06

Wie gibt man eigentlich unter Python einen Raw String aus? (Ohne "print")
In Java gibts ja System.out.println (immer '\n' am Ende) und System.out.print (kommt auf String an).
Wie ist denn das Python-pendant zu letzterem Aufruf?


Code: Alles auswählen

import sys
sys.stdout.write('spam')
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Beitragvon akis.kapo » Montag 4. September 2006, 21:24

Genau das war es!
Hat geklappt und sah genau so aus, wie erwartet/es sein soll.

Danke nochmal!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], snafu