Skip to content
  • Kategorien
  • World
  • Aktuell
  • Tags
  • Beliebt
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
linux-nerds.org

linux-nerds.org

  1. Übersicht
  2. Linux
  3. Python3
  4. Python3 - subprocess.Popen

Python3 - subprocess.Popen

Geplant Angeheftet Gesperrt Verschoben Python3
resticpython3
1 Beiträge 1 Kommentatoren 346 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • FrankMF Offline
    FrankMF Offline
    FrankM
    schrieb am zuletzt editiert von FrankM
    #1

    Für ein UI zum Tool Restic, an dem ich jetzt schon eine ganze Zeit "code", brauche ich einen Prozess der asynchron läuft.

    Ok, ich versuche das mal als Laie zu erklären. Ich starte oft Prozesse mit

    process = subprocess.run(['restic','version'], check=True, stdout=subprocess.PIPE, universal_newlines=True)
    

    Das gibt mir die Version von Restic zurück. Dieser Prozess wird gestartet und beendet!

    Nun wollte ich aber eine Sicherung mounten. Und dieser Prozess in Restic, wird gestartet und läuft, so lange bis man ihn mit CTRL + C auf der Konsole beendet. Jo, damit war dann meine Denksportaufgabe für gestern definiert. Ich muss eingestehen, es hat was länger gedauert 😀

    Nach einiger Zeit hatte ich rausbekommen, das ich es so machen muss.

    p1 = subprocess.Popen(cmd,stdin=subprocess.PIPE)
    

    Wir starten den Prozess und übergeben ihm den Restic Befehl (cmd) und setzen als stdin die subprocess.PIPE. Damit wird der Prozess unabhängig gestartet, mein Python3 Script wartet nicht mehr auf das Ende. So nach dem Motto, gestartet und vergessen 🙂

    Da tauchte das nächste Problem auf. Restic erwartet eine Passwort Eingabe. Ja, ich möchte das übergeben und ja ich weiß das ist aus Sicherheitsaspekten evt. nicht der beste Ansatz. Egal, da kümmere ich mich später drum!

    Viele Anleitungen im Netz gefunden, aber irgendwie war ich zu blöde die umzusetzen. Nur ein Ansatz machte dann bei mir das, was ich erwartete und auch teilweise verstand.

    # Wir schreiben das erwartete Passwort als Eingabe
    p1.stdin.write('12345678'.encode())
    p1.stdin.flush()
    p1.stdin.close()
    msg_box(self, "Repository erfolgreich gemountet!")
    

    Erste Zeile

    Ohne das .encode() funktioniert das nicht. Dem Prozess Popen muss das als Bytes Stream übergeben werden!

    This means that the string is converted to a stream of bytes, which is how it is stored on any computer. As bytes!

    Wir schreiben also diesen Bytes Stream in das Objekt p1
    Quelle: https://www.askpython.com/python/string/python-encode-and-decode-functions

    pwd='12345678'
    

    Und so sieht das aus, als Bytes Stream

    b'12345678'
    

    Zeile 2

    Die kann ich mir leider nicht erklären.

    Zeile 3

    Damit wird die Verbindung zum Prozess p1 geschlossen. Ohne schließen funktioniert es nicht.

    Wenn jemand weiß, wie man das Vernünftig erklären kann, wäre ich sehr dankbar.

    Fazit

    Der Prozess ist erfolgreich gestartet, läuft unabhängig vom Python Script. Das Passwort wird auch erfolgreich übergeben Das was ich brauchte 🙂 Wieder ein Stück weiter und was gelernt!!

    Im Fediverse -> @FrankM@nrw.social

    1. NanoPi R5S
    2. Quartz64 Model B, 4GB RAM
    3. Quartz64 Model A, 4GB RAM
    4. RockPro64 v2.1
    1 Antwort Letzte Antwort
    0
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    • FrankMF

      Vorstellung Restic UI Flask

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Restic UI Flask restic restic-ui flask python
      1
      6
      0 Stimmen
      1 Beiträge
      303 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Restic v0.16.0 released

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Restic restic linux
      1
      0 Stimmen
      1 Beiträge
      149 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Rest-Server Version 0.12.1 released

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux rest-server restic linux
      1
      0 Stimmen
      1 Beiträge
      134 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Python3 - PyQt6 installieren

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Python3 pyqt6 python3
      1
      0 Stimmen
      1 Beiträge
      438 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Python3 - Popen und seine Geheimnisse ;)

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Python3 restic restic-ui python3
      1
      0 Stimmen
      1 Beiträge
      224 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Python3 - QInputDialog

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Python3 python3
      1
      1
      0 Stimmen
      1 Beiträge
      199 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      checkmk - Rest-Server überwachen

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben checkmk checkmk linux restic
      1
      3
      0 Stimmen
      1 Beiträge
      615 Aufrufe
      Niemand hat geantwortet
    • FrankMF

      Restic - Ein Backupkonzept

      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Restic linux restic
      1
      0 Stimmen
      1 Beiträge
      1k Aufrufe
      Niemand hat geantwortet
    Powered by NodeBB | Contributors
    © 2022 frank-mankel.de
    Fediverse
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Kategorien
    • World
    • Aktuell
    • Tags
    • Beliebt