Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 9 Verwendung aus der C-Sprache

Durch die bisherige Serie das Beispiel (Anmerkung 2) in scikit-image Bewegen Sie sich wie es ist, Eingabedatei ändern, Mehrere Eingabedateien verarbeiten Schreiben Sie das Ergebnis in eine Datei GUI verwenden Link mit Netzwerk Code verbessern und Als Modul wiederverwenden Verarbeitungszeit messen und profilieren wurde angezeigt.

Sobald Sie es so weit beherrschen, möchten Sie es wahrscheinlich das nächste Mal aus der C / C ++ - Sprache verwenden.

Daher werde ich dieses Mal vorstellen, wie Python aus der C / C ++ - Sprache verwendet wird.

Verwenden Sie Python aus der C / C ++ - Sprache

** 1. Verwendung der Systemfunktion und der Popen-Funktion **

Python-Skript mit system () -Funktion system("python myscript.py"); Auf diese Weise können Sie Python aus der Sprache C verwenden. fp=popen("python myscript.py","r"); Als Ergebnis können Sie das Ergebnis empfangen und ausführen.

Derzeit kann diese Methode problemlos durchgeführt werden, solange Sie die Sprache C verwenden können.

Herausforderungen für diese Methode: Jedes Mal, wenn der Prozess ausgeführt wird, wird der Python-Interpreter vom System oder Popen gestartet, was den Overhead verursacht. Wenn das auszuführende Python-Skript die trainierte Datei zur Vorbereitung der Verarbeitung lesen muss, wird der Overhead sehr groß.

** 2. Einbetten von Python in andere Anwendungen **

Python-Standarddokumentation [Python in andere Anwendungen einbetten] (http://docs.python.jp/2/extending/embedding.html)

Python-Standarddokumentation 5.3. Reine Einbettung

Das Programm dient zur Ausführung der Funktionen im Python-Skript.

Dieser Ansatz erzeugt keine zusätzlichen Prozesse. Sie können ein Argument an den eingebetteten Python-Teil übergeben und das Ergebnis erhalten.

PyImport_Import(pName) Der Name des eingelesenen Moduls In diesem Beispiel geben wir hier den Namen des Python-Moduls an und führen die in diesem Modul enthaltenen Funktionen aus. (Um genau zu sein, gibt Python anscheinend den zu importierenden Modulnamen an und ruft das Modul (.py, .pyc, .pyd usw.) im aktuellen Verzeichnis gemäß der Einstellung seines PYTHONPATH auf. Wenn Sie eine Argumentstruktur wie "$ call ../multiply multiplizieren 3 2" in das Argument dieses Beispiels aufnehmen, PyImport_Import () schlägt fehl. )

Erhöhen Sie die Anzahl der im Modul enthaltenen Funktionen Sie können Folgendes tun:

.py:intmath.py


def multiply(a,b):
    print "Will compute", a, "times", b
    c = 0
    for i in range(0, a):
        c = c + b
    return c

def add(a,b):
    print "Will compute", a, " plus ", b
    return a+b

def div(a,b):
    print "Will compute", a, " div ", b
    return a/b

Ausführungsergebnis

.txt:Ausführungsergebnis.txt


>call.exe intmath div 5 2
Will compute 5  div  2
Result of call: 2
2

>call.exe intmath multiply 6 3

Will compute 6 times 3
Result of call: 18
18

>call.exe intmath add 6 3
Will compute 6  plus  3
Result of call: 9
9

>

Es kann auch so gemacht werden.

Dieses Beispiel ist sehr gefährlich, da die über die Befehlszeile eingegebenen Werte nicht überprüft werden.

Sie können Python-Objekte wie folgt in C-Sprachdatenstrukturen konvertieren: long PyInt_AsLong(PyObject *io) http://docs.python.jp/2/c-api/int.html

double PyFloat_AsDouble(PyObject *pyfloat) http://docs.python.jp/2/c-api/float.html

Durch diese Einbettung und Verwendung in der Sprache C kann der Aufwand für das Starten des Python-Interpreters und das Wiederholen der Beendigung mit der Funktion system () und der Funktion popen () vermieden werden. Darüber hinaus sollte beachtet werden Py_Initialize(); pModule = PyImport_Import(pName); Py_Finalize(); Es ist auch wichtig sicherzustellen, dass Sie nur dann laufen, wenn Sie es wirklich brauchen.

bewirken: Die C / C ++ - Sprachseite hat den Vorteil, dass unabhängig davon, wie sich die Implementierung des Python-Moduls ändert, keine Neuerstellung erforderlich ist, solange sich die Schnittstelle des aufrufenden Moduls, der Funktion, des Arguments und des Rückgabewerts nicht ändert.

Ich lerne noch [Anmerkung 1].

Im Beispielprogramm von 5.3. Reine Einbettung Da die Funktionsargumente und Rückgabewerte ganzzahlige Typen sind, erstellen wir ein Programm, das sie einfach durch Gleitkomma ersetzt.

Das Schreiben eines eingebetteten Programms erfordert ein gutes Verständnis von Python und C und erfordert möglicherweise eine Besessenheit, es zum Laufen zu bringen. Es ist ziemlich ungewöhnlich, einen Python-Programmierer zu haben, der das Einbetten von Python beherrscht, nur weil Sie einen Python-Benutzer in Ihrer Nähe haben. Schreiben wir also ein Programm, das leicht umgeschrieben wurde, und versuchen, es zu imitieren.

** Nachtrag: Wenn Sie nicht im Debug-Modus erstellen können **

LINK : fatal error LNK1104: cannot open file 'python27_d.lib' Wird in Visual Studio angezeigt. So verwenden Sie python27.lib sowohl im Release-Modus als auch im Debug-Modus wie folgt stackoverflow Es wurde geschrieben in.

#ifdef _DEBUG
  #undef _DEBUG
  #include <Python.h>
  #define _DEBUG
#else
  #include <Python.h>
#endif

Hinweis: Bei Verwendung von Python Embedded habe ich versucht, den Prozess mit dem Task-Manager anzuzeigen. Selbst als ich den Python-Modulteil ausführte, konnte ich bestätigen, dass der Prozess python.exe nicht erstellt wurde. Wenn Sie den Systembefehl oder Popen verwenden, versuchen Sie bitte, ihn einzubetten, da Sie das Starten von Python und die Anfangseinstellungen im Skript nicht viele Male wiederholen müssen.


Dinge zu schreiben, etc. Boost.Python C ++ eingebettet in Python mit Scipy.Weave Cython Numpy C-API Scipy Python Types and C-Structures

Hinweis 1: Wenn Sie die Anzahl der mit C / C ++ zu verknüpfenden Bibliotheken erhöhen, "benötigt diese Bibliothek diese Bibliothek, diese Bibliothek benötigt irgendwie mehr Bibliothek, und wenn Sie sie nicht verknüpfen, wird der bisher erstellte Teil erstellt. Ich kann es nicht einmal tun. " Es ist eher eine traurige Situation. Bei der Einbettung von Python in die C / C ++ - Sprache wird der Link hier geschrieben #include <Python.h> Ein Modul, das eine Zeile von enthält. Dieser Teil ist die Brücke zwischen der C / C ++ - Sprache und der Python-Sprache. Der Rest der Python-Sprache ist nicht verknüpft. Aus diesem Grund können Sie den zu importierenden Modulnamen im Beispielprogramm C als Befehlszeilenargument angeben. Es reicht aus, einen Python-Interpreter und eine Reihe von Python-Bibliotheken zu installieren. "Dieses Modul, dieses Modul und welches Modul" Es ist auch schön, eine endlose Zunahme der Anzahl der zu verknüpfenden Objekte verhindern zu können.

Hinweis: Im Fall von Visual Studio unter Windows wird angegeben, dass es nicht verknüpft werden kann, wenn sich die Version des Compilers ändert. Dies kann schwierig sein, wenn große Bibliotheken wie OpenCV erstellt werden. Beim Generieren einer Bibliothek für Python aus der C / C ++ - Erweiterung Cython muss die Version von Visual Studio identisch sein.

Hinweis 2: Der Grund für die Auswahl des Beispiels in Scikit-image ist, dass es bei der Ausführung des Beispiels nicht das Problem "Woher soll ich die erforderlichen Daten erhalten?" Verursacht.

Recommended Posts

Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 9 Verwendung aus der C-Sprache
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 6 Verbessern Sie den Python-Code
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 2 Verarbeiten Sie mehrere Dateien
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 7 Erstellen eines Moduls
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 8 Verarbeitungszeitmessung und Profiler
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 4 Verwenden Sie die GUI
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 3 Schreiben Sie in eine Datei
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 5 In Netzwerk-Apps integrieren
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Tipps zum Aufrufen von Python von C.
Verwendung der C-Bibliothek in Python
Der schnellste Weg für Anfänger, um Python zu beherrschen
Tipps zum Bearbeiten von numpy.ndarray aus c ++ - Ich möchte einen Iterator verwenden -
Wickeln Sie C mit Cython für Python ein
~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~
Wrap C ++ mit Cython zur Verwendung von Python
~ Tipps für Python-Anfänger mit Liebe von Pythonista ② ~
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
Ich wollte die Python-Bibliothek von MATLAB verwenden
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
[Für Anfänger] Skript innerhalb von 10 Zeilen (4. Verbindung von Python zu sqlite3)
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
Verwenden Sie die Flickr-API von Python
Web Scraping für Anfänger in Python (1)
Web Scraping für Anfänger in Python (4) -1
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Ich möchte ein Glas aus Python verwenden
[Python] Organisieren der Verwendung für Anweisungen
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
Verwendung von "deque" für Python-Daten
Verwenden von C ++ - Funktionen aus Python mit pybind11
Eine Einführung in Python für C-Sprachprogrammierer
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Beispiel für eine Python-Verbesserung] Was ist die empfohlene Lernseite für Python-Anfänger?
Vorgehensweise von der AWS CDK (Python) -Entwicklung bis zur AWS-Ressourcenkonstruktion * Für Anfänger
So verwenden Sie MkDocs zum ersten Mal
Python für Super-Anfänger Super-Anfänger Python # Einfach loszuwerden
Studie aus Python Hour7: Verwendung von Klassen
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Verwenden Sie vorerst Logger mit Python
[Bash] Holen Sie sich die Kraft von Python aus Bash mithilfe der folgenden Dokumentation
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Verwendung von Datenanalysetools für Anfänger
Tipps zum Erreichen der ATND-API mit Python
Verwenden Sie PIL in Python, um nur die gewünschten Daten aus Exif zu extrahieren
Der einfachste Weg, OpenCV mit Python zu verwenden
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
[Algorithmus x Python] Verwendung der Liste
Verwenden Sie das Python-Framework "cocotb", um Verilog zu testen.
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Ich möchte Ceres Solver aus Python verwenden
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Python-Tipps] So rufen Sie mehrere Schlüssel mit dem Maximalwert aus dem Wörterbuch ab
Ich möchte C ++ - Code aus Python-Code erstellen!