2016-07-28 5 views
4

Ich möchte in der Lage sein, ein PHP-Array an ein Python-Skript zu übergeben, das die Daten zur Ausführung einiger Aufgaben verwendet. Ich wollte versuchen, mein Python-Skript aus PHP mit Hilfe von shell_exec() auszuführen und die JSON-Daten dorthin zu übergeben (was ich komplett neu bin).JSON-Daten von PHP an Python übergeben Skript

$foods = array("pizza", "french fries"); 
$result = shell_exec('python ./input.py ' . escapeshellarg(json_encode($foods))); 
echo $result; 

Die "escapeshellarg (json_encode ($ Lebensmittel)))" Funktion scheint meine Array zu übergeben, wie das folgende an dem Python-Skript (ich diesen Wert, wenn ich die Funktion 'echo':

'["pizza","french fries"]' 

dann innerhalb des Python-Skript:

import sys, json 
data = json.loads(sys.argv[1]) 
foods = json.dumps(data) 
print(foods) 

Dies druckt die folgende an den Browser aus:

["pizza", "french fries"] 

Dies ist eine einfache alte Zeichenfolge, keine Liste. Meine Frage ist, wie kann ich diese Daten am besten wie eine Liste oder irgendeine Art von Datenstruktur behandeln, die ich mit dem "," als Trennzeichen durchlaufen kann? Ich möchte den Text nicht wirklich an den Browser ausgeben, ich möchte nur die Liste in Teile aufteilen und sie in eine Textdatei auf dem Dateisystem einfügen.

+0

In Ihrem Beispiel ('data = json.loads (sys.argv [1])') ** Daten ** ist bereits eine ** Liste **, dann mit 'Dumps 'konvertieren Sie es wieder zurück in a Zeichenfolge – aabilio

Antwort

0

Sie foods bespannen base64, dann auf die Daten zu Python übergeben und den Zwischenspeicher Beispiel dekodieren:

import sys, base64 
if len(sys.argv) > 1: 
    data = base64.b64decode(sys.argv[1]) 
    foods = data.split(',') 
    print(foods) 
0

Wenn Sie die JSON-String haben: data = ‚[ "Pizza"," französisch Pommes "] ' und json.loads (Daten) funktioniert nicht (was es sollte), dann können Sie verwenden: MyPythonList = eval (Daten). eval nimmt einen String und wandelt es in ein Python-Objekt

0

das gleiche Problem hatte

Lassen Sie mich Ihnen zeigen, was ich tat

PHP:

base64_encode(json_encode($bodyData)) 

dann

json_decode(shell_exec('python ' . base64_encode(json_encode($bodyData))); 

und in Python habe ich

import base64 

und

content = json.loads(base64.b64decode(sys.argv[1])) 

wie Em L bereits erwähnt :)

Es funktioniert für mich Prost!

Verwandte Themen