Prozessausgabe on-the-fly formatieren

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 5. Februar 2007, 18:37

sape hat geschrieben:
The executable argument specifies the program to execute. It is very seldom needed: Usually, the program to execute is defined by the args argument.[...]
Wo steht hier das ein iterable erwartet wird?
Ich spreche doch gar nicht von ``executable``. Aber es ist auf der selben Seite, hier:
http://docs.python.org/lib/node529.html hat geschrieben:args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence or string, but can be explicitly set by using the executable argument.
Wenn wir noch mal darüber nachdenken (oder einfach in den Quellcode schauen) warum dort eine Liste akzeptiert wird kommen wir zu etwas sehr praktischem: subprocess.Popen kann, wenn man ihm statt einem String eine Liste übergibt, selbst quoten, ansonsten muss man das selbst machen. Und warum man besser quoten lässt statt selber quotet (bzw. es sogar vergisst), muss ich nicht erklären, oder?

In diesem Beispiel ist es ja egal, aber ich finde es ist besser Beispiele zu bringen, die problemloser sind wenn man auf die Idee kommt sie zu erweitern. Was wenn man Leerzeichen in den Argumenten hat?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 5. Februar 2007, 19:01

Leonidas hat geschrieben:Könnten wir nun dazu übergehen, den ersten Parameter von subprocess.Popen generell als Liste/Tupel zu übergeben? Wunderbar, danke...
Bis 2.5.1 bitte nur Listen, siehe http://python.org/sf/1357915...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 6. Februar 2007, 08:05

Leonidas hat geschrieben:Könnten wir nun dazu übergehen, den ersten Parameter von subprocess.Popen generell als Liste/Tupel zu übergeben?
Ah, sorry, hab gestern die zwei Wörter "den ersten" überlesen ;)

Also hier die Optimal Lösung:

Code: Alles auswählen

import sys, subprocess

command = ["ping", "heise.de"]

process = subprocess.Popen(
    command,
    shell   = True,
    stdout  = subprocess.PIPE
)
for line in iter(process.stdout.readline, ''):
    sys.stdout.write("\t%s\n" % line.rstrip())

print "ENDE"

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 6. Februar 2007, 17:18

birkenfeld hat geschrieben:Bis 2.5.1 bitte nur Listen, siehe http://python.org/sf/1357915...
Ah, stimmt - ich bin sogar mal über diesen Bugreport gestolpert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Dienstag 6. Februar 2007, 19:38

Hat das Windows-``ping`` auch eine Option ``-c NUM`` um die Anzahl der Pings anzugeben? Wenn man die einbaut, dann kommt das Skript auch unter Linux irgendwann zu einem Ende und bombardiert den armen Heise-Server nicht non-stop. :-)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dienstag 6. Februar 2007, 21:28

Das sendet doch standardmäßig eh nur 4 Stück.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Dienstag 6. Februar 2007, 21:45

Leonidas hat geschrieben:[...]
Wenn wir noch mal darüber nachdenken (oder einfach in den Quellcode schauen) warum dort eine Liste akzeptiert wird kommen wir zu etwas sehr praktischem: subprocess.Popen kann, wenn man ihm statt einem String eine Liste übergibt, selbst quoten, ansonsten muss man das selbst machen. Und warum man besser quoten lässt statt selber quotet (bzw. es sogar vergisst), muss ich nicht erklären, oder?

In diesem Beispiel ist es ja egal, aber ich finde es ist besser Beispiele zu bringen, die problemloser sind wenn man auf die Idee kommt sie zu erweitern. Was wenn man Leerzeichen in den Argumenten hat?
Ok stimmt, hast Recht.

lg
BlackJack

Dienstag 6. Februar 2007, 23:43

birkenfeld hat geschrieben:Das sendet doch standardmäßig eh nur 4 Stück.
Also ein ``ping`` ohne die Option läuft bei mir bis ich Strg+C drücke.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 7. Februar 2007, 00:08

Unter Windows?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 7. Februar 2007, 10:09

Eben. ;)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Mittwoch 7. Februar 2007, 10:35

:?: Jetzt hast Du mich verwirrt.

Nochmal: Ich fragte ob ``ping`` unter *Windows* auch die Option `-c` kennt, weil man die unter *Linux* braucht.

Dann kann man die einbauen und das Skript läuft unter *Windows* und *Linux*.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 7. Februar 2007, 11:25

Achso, es soll unter beidem laufen.

Wie auch immer, unter Windows ist die Option `-n`.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten