Hi,
normalerweise mache ich Java, habe mich jetzt aber entschieden meine kleinen Commandline-Tools in Python zu bauen und habe nen kleines Verständnisproblem mit dem Subprocess-Modul, in meinem Fall will ich grad nen kleines Tool zum Überwachen von Yum schreiben, dafür brauche ich so etwas wie
while(read()): in java wäre das vgl. Inputstreamreader
while((line=br.readLine())!=null)
aber irgendwie will es nicht,
while(out = p.stdin.read()) mag python ja nicht und while(p.wait()) auch nicht :-/
wichtig ist, dass der Output zeilenweise eintrudelt und nicht gebuffert als kompletter Block am Ende.
Wäre toll wenn mir jemand helfen könnte.
Subprocess Output On-The-Fly
Wie wär's damit:
Code: Alles auswählen
from subprocess import Popen, PIPE, STDOUT
process = Popen(('ls', '-lh'), stdout=PIPE, stderr=STDOUT)
for line in process.stdout:
print line
- Hannes-Spz
- User
- Beiträge: 123
- Registriert: Sonntag 7. August 2005, 22:42
hi@all
ich finds mist - hier klappt GAR nix:
wobei die exe: "summe" folgenden code hat:
dennoch ergibt es die lustige fehlermeldung:
mit der ich aber absolut nichts anfangen kann
bitte helft mir! - ich dreh sonst durch bei dem kram
liebe grüße und danke im voraus
hannes
ich finds mist - hier klappt GAR nix:
Code: Alles auswählen
import os, popen2, subprocess
process = subprocess.Popen("E:\\_cpp\\tuts\\summe.exe 3 41", shell=True, stdout=subprocess.PIPE)
process.wait()
print process.stdout.read()
Code: Alles auswählen
#include <cstdlib>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x, y;
x = atoi(argv[1]);
y = atoi(argv[2]);
cout << x+y;
return 1;
}
Code: Alles auswählen
Traceback (most recent call last):
File "C:/Dokumente und Einstellungen/04jostoy/Desktop/popen_.py", line 5, in -toplevel-
process = subprocess.Popen("E:\\_cpp\\tuts\\summe.exe 3 41", shell=True, stdout=subprocess.PIPE)
File "C:\Python24\lib\subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "C:\Python24\lib\subprocess.py", line 593, in _get_handles
p2cread = self._make_inheritable(p2cread)
File "C:\Python24\lib\subprocess.py", line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
TypeError: an integer is required
bitte helft mir! - ich dreh sonst durch bei dem kram
liebe grüße und danke im voraus
hannes
Die Fehlermeldung kann ich nicht nachvollziehen. Wie startest Du das Programm denn?
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Hannes!Hannes-Spz hat geschrieben:Code: Alles auswählen
TypeError: an integer is required
Subprocess verhält sich unter Windows ziemlich unberechenbar. Das habe ich öfter schon mitbekommen und ist der Grund, weshalb ich es so selten benutze. Je nach übergebenen Parametern, kommt immer wieder die oben genannte Meldung. Da hätten sich die Entwickler eine aussagekräftigere Fehlermeldung überlegen können...
Versuche doch mal diesen Aufruf:
Code: Alles auswählen
process = subprocess.Popen(("E:\\_cpp\\tuts\\summe.exe", "3", "41"), stdout=subprocess.PIPE)
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Hannes!
Du könntest versuchen, dich bei deinen Freunden zu melden und diesen dein Problem zu schildern... vielleicht können sie dir helfen...
Und wenn nicht, dann möchten sie möglicherweise einfach so mal mit dir reden. Vielleicht sind sie ja schon traurig, weil du dich nicht meldest...
War nur so´n Gedanke *sry*.
Hdl, Maus
Du könntest versuchen, dich bei deinen Freunden zu melden und diesen dein Problem zu schildern... vielleicht können sie dir helfen...
Und wenn nicht, dann möchten sie möglicherweise einfach so mal mit dir reden. Vielleicht sind sie ja schon traurig, weil du dich nicht meldest...
War nur so´n Gedanke *sry*.
Hdl, Maus