Ich kann im LXTerminal ein Shell Skript mit "sudo /home/pi/clewarecontrol-2.8/grün.sh" ausführen lassen.
Wie binde ich dieses Skript am einfachsten in ein Python Skript ein?
Ich habe es mit Subprocess.call, subprocess.run, os.system, Popen, und allem möglichen versucht. Das Python Skript wird zwar ausgeführt, aber es passiert nichts.
Shell Skript in Python einbinden
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Whatever: Am einfachsten und sichersten, also die empfohlene Lösung, wäre `subprocess.run()`. Wenn dann nichts passiert, musst Du halt den Fehler finden. Also zum Beispiel Debugausgaben ins Python-Programm und/oder Shell-Skript einbauen und schauen wo genau es nicht das macht was Du erwartest.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Das Skript von gestern? Gar nicht. Außer dem einen echten Kommando das du direkt mit Python subprocess.run ausführen kannst, hat es keine on Mehrwert und verkompliziert das ganze nur.Whatever hat geschrieben: ↑Freitag 16. November 2018, 10:36 Ich kann im LXTerminal ein Shell Skript mit "sudo /home/pi/clewarecontrol-2.8/grün.sh" ausführen lassen.
Wie binde ich dieses Skript am einfachsten in ein Python Skript ein?
Ich habe es mit Subprocess.call, subprocess.run, os.system, Popen, und allem möglichen versucht. Das Python Skript wird zwar ausgeführt, aber es passiert nichts.
Doch. Natürlich ist das möglich. So wie es auch möglich ist, sich in den Fuß zu schießen, damit der Notarzt einem die Schuhe auszieht. Geht, ist aber eine schlechte Idee. Und das gleiche gilt hier auch. Benutze
subproces.run([“kommando”, “Argument”], cwd=“Verzeichnis in dem das alles passieren soll”)
und du hast eine unnötige Ebene weniger.
Nachtrag: diese Ebene (bzw der Mangel daran) macht die Fehleranalyse einfacher, statt das ganze durch das Skript noch zusätzlich zu verschleiern.
subproces.run([“kommando”, “Argument”], cwd=“Verzeichnis in dem das alles passieren soll”)
und du hast eine unnötige Ebene weniger.
Nachtrag: diese Ebene (bzw der Mangel daran) macht die Fehleranalyse einfacher, statt das ganze durch das Skript noch zusätzlich zu verschleiern.