Python Skript mit exec in PHP aufrufen

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
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Hallo Ihr,

es handelt sich um meinen ersten Versuch, ein Python-Skript in PHP aufzurufen. Da das nicht erfolgreich war, versuche ich es erst einmal ganz einfach mit

Code: Alles auswählen

<?php echo("php-test");
exec("python3 test1.py", $output);
?>
Mit test1.py

Code: Alles auswählen

#!/usr/bin/env python3
print("test1")
Ausgabe des PHP-Skripts: php-test Array
Die Ausgabe von print("test1") erscheint nicht. Wie soll ich weiter vorgehen ?

maksimilian
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ganz anders? PHP und Python zu mischen, insbesondere auf eine so primitive Art, ist einfach eine ganz schlechte Idee.

Nimm entweder ein simples Webserver Framework wie zB. bottle oder flask in python her, und mach alles darin. Oder mach alles in PHP.

Welches Problem soll denn gelöst werden?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@maksimilian: Du bist doch der Typ mit der Waage. Also eine grafische Aufbereitung und Anzeige der Daten im Browser ist auch mit Python möglich. Warum bringst du hierfür PHP ins Spiel?

Deinen bisherigen Beiträgen entnehme ich, dass du Debian Stretch auf dem Server verwendest. Da sollte auch Python bereits vorinstalliert sein. Und auch Python ist fähig, Internetseiten dynamisch zu erzeugen, so wie bei PHP. Nur für den Fall, dass dir das nicht bewusst war...
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

@ __deets__

Ich habe ja auch kein gutes Gefühl bei der Mischung von PHP und Python.

Konkretes Problem im Moment: Ich möchte ein Python-Skript im Browser aufrufen, welches unter Verwendung von GPIO Daten einer Wägezelle ausliest, um den Tara Korrekturfaktor zu ermitteln und diesen in eine Konfigurationsdatei zu schreiben. Das funktioniert ja schon. Die Tara-Kalibrierung der Wägezelle ist kein einmaliger Vorgang, weshalb hierfür eine einfache Benutzerschnittstelle zur Verfügung stehen soll (sowohl über Knopfdruck an der Waage als auch remote).

maksimilian


@ snafu

Richtig, ich bin der „Typ mit der Waage“ (sehr aufmerksam). Die Visualisierung der Messdaten ist ja in anderes Problem, als dasjenige, welches ich in diesem Thread anspreche. Aber da Du es erwähnst: Ich bin mir immer noch nicht im Klaren, wie ich das Thema angehen kann (es fehlt die Anfangshilfe). Mir wäre es am sympathischsten, es vollständig mit PHP zu lösen. Ich kenne mich zwar mit PHP etwas aus, aber bei Visualisierung (und Java) muss ich noch passen.

maksimilian
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Spaetestens wenn du eine bestaendig laufende Anzeige von Werten haben willst, dann geht dein exec-Ansatz mit PHP & Python in die Hose. Ich habe lange kein PHP mehr gemacht, und kenne mich darum damit nicht mehr besonders gut aus. Aber sowas wie Websockets, welche man fuer so etwas braucht, sind in PHP nicht weniger kompliziert als in Python.

Ich wuerde also gleich auf ein websocket-faehiges Framework wie zB tornado setzen. Dann kannst du alles in Python schreiben, und musst dir nicht eine Interprozess-Kommunikation dazu basteln.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Danke, __deets__, ich versuche es mit dygraphs. Das exec Problem ist aber nicht gelöst.

maksimilian
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Diese Antwort verstehe ich nicht. Was hat die Darstellung in JS mit dem Server zu tun?

Wie dem auch sei: wir sind ja hier auf Python spezialisiert. PHP gibt es anderswo bestimmt Hilfe, denn exec hat ja nichts mit Python zu tun ob das klappt oder nicht. Und dazu findet sich ja auch viel da draussen, zb https://stackoverflow.com/questions/121 ... c-problems
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

maksimilian hat geschrieben: Donnerstag 20. Dezember 2018, 10:53 Das exec Problem ist aber nicht gelöst.
exec() gibt nur die letzte Zeile der Ausgabe zurück. Wahrscheinlich ist das bei dir einfach eine leere Zeile. Wenn du alle Zeilen haben willst, dann musst du exec() als zweiten Parameter ein Array mitgeben.

Oder du nutzt alternativ shell_exec(), welches als Rückgabe alle Zeilen als einen String liefert. Hier kannst du anstelle der Funktion auch schreiben:

Code: Alles auswählen

$ausgabe = `python dein_skript.py`;
Das ist aber PHP-Basiswissen und gehört auch nicht wirklich in ein Python-Forum. Falls du dich dafür nicht woanders anmelden möchtest und die PHP-Fragerei nicht ausufert, dann nutze bitte demnächst wenigstens das Unterforum Offtopic.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Entschuldigt bitte! Da ich nun weiß, dass es sich beim exec() um ein reines PHP Problem handelt, setze ich diesen Thread nicht fort. Danke für Eure konstruktive Unterstützung.

maksimilian
Antworten