LD_LIBRARY_PATH und Python und Paiza.io Problem oder paiza.io, um mruby auszuführen und http2 zu kommunizieren

Hintergrund

Paiza.io kann auf das Netzwerk zugreifen und Dateien verarbeiten.

Das bedeutet, dass libtrusterd über Pythons ctypes ausgeführt werden kann!

Ärger

Wie erwartet könnten wget-ähnliche Dinge leicht in Python implementiert werden.

context = ssl.create_default_context()
conn = http.client.HTTPSConnection(host, 443, context=context)
conn.request('GET',path)
res = conn.getresponse()
f = open(libname, "wb")
f.write(res.read())
f.close()

Auch https ist easy ™

libevent ist nicht auf paiza.io!

Nun, es ist in Ordnung, wenn Sie dies sowie libtrusterd.so mitbringen.

Aber es funktioniert nicht.

@Phi, berühmt für tmlib.js, schrieb einen Python-Artikel Ich wusste es zum ersten Mal zu diesem Zeitpunkt, aber dank diesem Artikel Der beabsichtigte Pfad wurde erfolgreich zu LD_LIBRARY_PATH hinzugefügt.

os.environ["LD_LIBRARY_PATH"] = os.environ.get("LD_LIBRARY_PATH") + ":."

Aber es funktioniert immer noch nicht. ..

Dann sollten Sie den Prozess erneut auslösen.

Es scheint, dass dlopen die Umgebungsvariablen nur betrachtet, wenn der Prozess gestartet wird.

Um die Sache noch schlimmer zu machen, gibt paiza.io zumindest beim Neustart des Prozesses keine Ergebnisse aus! Vielleicht gibt es eine Möglichkeit, mit untergeordneten Prozessen zu arbeiten, aber es mangelt an Python-Erfahrung Daher ist der Code, den ich geschrieben habe, NG. Wenn die Standardausgabe des untergeordneten Prozesses vom übergeordneten Prozess absorbiert wird Ich fühle mich wie ich gehen kann.

Erinnere dich an den Mann von dlopen

Sie können die gemeinsam genutzte Bibliothek so oft öffnen, wie Sie möchten, sie wird jedoch nach dem zweiten Mal nicht mehr geladen. Ich habe das Gefühl, dass es eine Beschreibung gab, was bedeutet, dass ich mich an die geöffnete Bibliothek erinnere.

Rufen Sie die gemeinsam genutzte Bibliothek, die angeblich im Voraus fehlt, mit ctypes.CDLL auf. Ich habe libtrusterd ausgeführt.

dummy = ctypes.CDLL("./libevent-2.0.so.5")
dummy = ctypes.CDLL("./libevent_core-2.0.so.5")
dummy = ctypes.CDLL("./libevent_openssl-2.0.so.5")

Großer Erfolg

Zusammenfassung

--LD_LIBRARY_PATH ist bereits zu spät bei dlopen, auch wenn es im Code neu geschrieben wird

In Verbindung stehender Artikel

Recommended Posts

LD_LIBRARY_PATH und Python und Paiza.io Problem oder paiza.io, um mruby auszuführen und http2 zu kommunizieren
Führen Sie mruby mit Python oder Blender aus
Installieren Sie Python3.5 + NumPy + SciPy und führen Sie es unter Windows 10 aus
Führen Sie die Pip-Installation unter MacOS Python 3.7 oder höher aus
Führen Sie Openpose unter Python (Windows) aus.
Python auf Ruby und wütend Ruby auf Python
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie den Unix-Befehl auf Python aus
Python-Bitoperator und logische Summe
Python oder und und Operatorfalle
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Python 3.6 unter Windows ... und zu Xamarin.
Installieren Sie Dropbox und führen Sie es unter Ubuntu 20.04 aus
Verknüpfen Sie Modelica und Python unter Windows
Führen Sie Python planmäßig auf AWS Lambda aus
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
[Python] gibt A [oder / und] B zurück
Führen Sie Python regelmäßig auf Heroku Scheduler aus
Installieren Sie Python3 und Django unter Amazon Linux (EC2) und führen Sie den Webserver aus