subprocess popen stdout von python script

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.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

um ein Backupscript für Barman zu testen schreibe ich mir gerade ein kleines Testscript um etwas lokal zu testen.

Dazu habe ich folgende Ffunktion geschrieben:

Code: Alles auswählen

def list_backup(standort):
    today = date.today().strftime("%Y%m%d")
    file_name = "{}.log".format(standort)
    print(file_name)
    content = ""
    with open(file_name, 'r') as reader:
        content = reader.read()
    print(content)
    print(today)
    if today in content:
        print(today)
Ich rufe die Funktion dann wie folgt auf:

Code: Alles auswählen

 out = subprocess.Popen(['python', 'pseudo_barman.py', '-f', 'list-backup', '-p', standort],
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE, bufsize=0)
 backup_info = str(out.stdout)
Statt nun die Ausgabe der Strings durch print() ist habe ich in der Variable backup_info den Wert

Code: Alles auswählen

<_io.BufferedReader name=5>
.
Wie bekomme ich die Ausgabe von print in das stdout von subprocess.


VG Georg
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nieselfriem: Naja was erwartest Du wenn Du ein Datei(ähnliches) Objekt in eine Zeichenkette umwandelst. Du musst die Daten halt aus der Datei auslesen. Wobei die Frage ist ob das wirklich selber machen willst. Muss es denn unbedingt `Popen` sein? Ginge nicht auch `subprocess.run()`?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hi,

naja das mache ich doch mit der Zeile content = reader.read() und content ist doch vom Datentyp String . Aber statt Popen klappt es mit run () ganz gut.


Danke für den Hinweis :)


VG Georg
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nieselfriem: `out.stdout` ist ein Dateiobjekt. Da liest Du nix, da hast Du einfach versucht das mit `str()` in eine Zeichenkette umzuwandeln.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten