Popen und stderr
Verfasst: Samstag 7. August 2021, 12:53
Mal wieder ein Problem, was mich fordert. Extrem fordert, da ich es vermutlich nicht verstehe...
Ich bastel an einem UI für Restic und setze dafür oft subprocess.run ein. Ein Beispiel
Ok, das funktioniert sehr gut und man kann auch prima mit
den Fehlercode ausgeben usw. Nun habe ich eine Aufgabe, das Mounten einer Datensicherung, wo das mit subprocess.run nicht geht, da der Prozeß nicht beendet wird, sondern weiter läuft bis man ihn beendet.
Auch hier wieder mein Beispielcode
Man sieht, das ich ein abgefragtes PW mittels p1.stdin.wrtite(pwd) übergebe. Das funktioniert so weit alles, wie ich das brauche.
Aber, wenn man nun das Passwort falsch eingibt, möchte ich das bitte abfangen. Auf der Konsole taucht das hier auf
Das wollte ich jetzt mit stderr irgendwie abfangen. Nach mehreren Stunden try & error, komme ich zu dem Schluss, ich bin da irgendwie auf dem Holzweg.
Ich vermute, da es sich um einen asynchronen(?) Prozess handelt, kann man so nicht auf die Daten zugreifen (reine Spekulation)
Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte wie man das "richtig" löst.

Ich bastel an einem UI für Restic und setze dafür oft subprocess.run ein. Ein Beispiel
Code: Alles auswählen
process = subprocess.run(['ls',
'-lha',
mount_path],
check=False,
stdout=subprocess.PIPE,
universal_newlines=True)
output = process.stdout
mainWin.widget.setPlainText(output)
self.statusBar().showMessage(mount_path)
Code: Alles auswählen
process.check.returncode()
Auch hier wieder mein Beispielcode
Code: Alles auswählen
# Create cmd
cmd = ['restic',
'-r',
backup_data[row].repository,
'mount',
mount_path]
pwd = backup_data[row].password.encode()
# We create the object, here with stdin and open the asynchronous subprocess
p1 = subprocess.Popen(cmd,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
p1.stdin.write(pwd)
p1.stdin.close()
Aber, wenn man nun das Passwort falsch eingibt, möchte ich das bitte abfangen. Auf der Konsole taucht das hier auf
Code: Alles auswählen
Fatal: wrong password or no key found
Ich vermute, da es sich um einen asynchronen(?) Prozess handelt, kann man so nicht auf die Daten zugreifen (reine Spekulation)
Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte wie man das "richtig" löst.