Shell Skript in Python einbinden

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
Whatever
User
Beiträge: 6
Registriert: Donnerstag 15. November 2018, 14:06

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.
Benutzeravatar
__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
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
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
User
Beiträge: 6
Registriert: Donnerstag 15. November 2018, 14:06

@_deets_ also gibt es keine Möglichkeit, ein Shell Skript, das im Terminal ganz normal ausführbar ist, in einem Python Skript im Hintergrund übers Terminal ausführen zu lassen?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten