Seite 1 von 1
Subprocess Output On-The-Fly
Verfasst: Mittwoch 2. August 2006, 10:09
von oozoo
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.
Verfasst: Mittwoch 2. August 2006, 12:54
von BlackJack
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
Verfasst: Mittwoch 2. August 2006, 15:07
von oozoo
Das tut's, danke

Verfasst: Donnerstag 7. September 2006, 21:09
von Hannes-Spz
hi@all

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()
wobei die exe: "summe" folgenden code hat:
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;
}
dennoch ergibt es die lustige fehlermeldung:
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
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
Verfasst: Donnerstag 7. September 2006, 22:57
von BlackJack
Die Fehlermeldung kann ich nicht nachvollziehen. Wie startest Du das Programm denn?
Verfasst: Freitag 8. September 2006, 07:17
von gerold
Hannes-Spz hat geschrieben:
Hallo Hannes!
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)
Vielleicht funktioniert es dann bei dir.
lg
Gerold

Nur ein Verusch!
Verfasst: Freitag 8. September 2006, 19:56
von Maus
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