subprocess.Popen() - Stream Stout

Nexus633

Nexus633

Eroberer
subprocess.Popen() - Stream Stdout

Hallo liebe leute,
ich mal wieder :-)

Ich habe ja in meinen vorherigen Threads beschrieben was ich machen möchte.
Für die die es nicht wissen, gelesen haben. Es geht um einen Installer der die Skripte für die Kommunikation zwischen webinterface und Server ermöglicht.
Das ganze habe ich in Bash bereits realisiert (Vor 1 Jahr als ich meinen ersten Thread gepostet habe :-))

Nun habe ich mich in Python verliebt :-) <3 xD

Ich habe nun folgendes Problem. Ich muss natürlich auch Software wie Screen bz2 etc... Installieren und Natürlich auch Optionale Software die vom Kunden ausgewählt wird.
Ich habe im Internet leider nur die Möglichkeit gefunden mit subprocess.Popen oder mit os.Popen (obwohl ich hier denke das der Namensraum OS den Namensraum Subprocess Included hat und das ein und der selber Befehl ist :-)) den Paketmanager auszuführen. Wir gehen nun mal nur von Debian aus.

wenn ich als Test eine Frage von apt Provoziere, also apt-get remove htop - Möchten Sie fortfahren [J/n]?: und das in einem Stream ausgebe, fehlt mir genau diese Zeile...

Code:
#!/usr/bin/env python

from subprocess import *

proc = Popen('apt-get remove htop',
                       shell=True,
                       stdout=PIPE,
                       )
while proc.poll() is None:
    output = proc.stdout.readline()
    print(output.replace("\n",""))

Resault:
1ANw1dI.png

Wie mache ich das am besten ?

hat jemand von euch eine Idee ?

Gruß
 
Zuletzt bearbeitet:
Hey,
danke für die Antwort....
Nur wie ?

Ich finde zwar da einen Teil dazu aber nicht wie ich diese Definiere.
Hast du ein Beispiel für mich ?

Gruß
 
Der Konstruktor
Code:
subprocess.Popen(..)
nimmt die Standarddatenströme als Argumente auf.
Also musst du nur eine Pipe für den STDIN, respektive den STDERR Strom definieren, so wie du es auch für den STDOUT gemacht hast.
Wobei ich mich frage, warum du in dem konkreten Anwendungsfall überhaupt die Eingabe abfragen willst.
Für eine Stapelverarbeitung ist es vielleicht intelligenter, interaktive Rückfragen zu unterdrücken.

MfG

Schard
 
Hey,
Sorry für die späte Antwort...
Ich komme erst heute dazu weiter zu machen.

Ich werde das nachher mit der PIPE probieren. Das mit dem installieren war ein Beispiel. Der Einsatz kommt aber öfter vor.

Danke dir

Gruß

Gesendet von meinem HTC One mit Tapatalk
 
Hey,
auch die PIPE beim stdin funktioniert leider nicht.
Mir fehlt leider noch immer die abfragezeile...

Code:
proc = Popen('apt-get remove htop',
                        shell=True,
                        stdout=PIPE,
                        stdin=PIPE
                        )
while proc.poll() is None:
    output = proc.stdout.readline()
    stdout.write(output)

Aktuell noch das beispiel "apt-get remove htop" - Wie bereits gesagt geht es aber nicht nur um diese Funktion... Ich brauche es in mehreren fällen.
Hat da jemand noch eine Idee ?!

Gruß
 
Moin,

schau dir mal das sys modul an also sys.sdout oder sys.stderr.
Hatte sowas auch mal vor einiger Zeit, weiß nur nicht mehr im welchem script muss ich bei zeiten mal schauen wie ich es damals gelöst habe.

Alternativ kann ich dir für python fragen das python forum empfehlen [http://www.python-forum.de] die Leute dort konnten mir zumindest immer weiterhelfen.
 

Ähnliche Themen

mailman Paket hängt beim installieren oder konfigurieren

nach backup restore probleme beim installieren

Probleme bei erster Gentoo Installation

Amavis & Benachrichtigungen

Zurück
Oben