Seite 1 von 1

subprocess popen stdout von python script

Verfasst: Mittwoch 10. Februar 2021, 16:22
von nieselfriem
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

Re: subprocess popen stdout von python script

Verfasst: Mittwoch 10. Februar 2021, 16:35
von __blackjack__
@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()`?

Re: subprocess popen stdout von python script

Verfasst: Donnerstag 11. Februar 2021, 09:10
von nieselfriem
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

Re: subprocess popen stdout von python script

Verfasst: Donnerstag 11. Februar 2021, 10:05
von __blackjack__
@nieselfriem: `out.stdout` ist ein Dateiobjekt. Da liest Du nix, da hast Du einfach versucht das mit `str()` in eine Zeichenkette umzuwandeln.