Im Allgemeinen erstelle ich zwei FIFO-Warteschlangen, die von meinen .c- und .py-Programmen gelesen und beschrieben werden können. Um zu ermöglichen, dass mein .c-Programm mit Python interagiert, habe ich die <python2.7/Python.h>
-Bibliothek aufgenommen.Lesen und Schreiben von Fifo-Dateien zwischen C und Python
Erstens erstellt mein .c-Programm eine Datei namens CFifo und schreibt Text mit fprintf. Kein Problem dort.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <python2.7/Python.h>
int main() {
FILE *CFifo, *pythonFifo, *pythonFile;
char buffer[1024];
// declare python
Py_SetProgramName("writer.py");
// init python
Py_Initialize();
// open python
pythonFile = fopen("writer.py", "r");
// C writes to file, python reads from this file
CFifo = fopen("./CFifo", "w");
// Print strings to file using fprintf
fprintf(CFifo, "This is a test");
// close file python reads
fclose(CFifo);
Der zweite Teil meines C-Programm soll es hängt die Information geschrieben (in der zweiten FIFO-Warteschlange) durch meinen Python Programm, sondern stattdessen nur in dem Endgerät lesen, wenn ./pythonFifo
öffnen.
// make second fifo queue
// python writes to this file, C reads from it
mkfifo("./pythonFifo", 0777);
// run python program
PyRun_SimpleFile(pythonFile, "writer.py");
pythonFifo = fopen("./pythonFifo", "r");
while(fgets (buffer, sizeof(buffer), pythonFifo)) {
printf("%s", buffer);
}
// close python
Py_Finalize();
fclose(pythonFifo);
remove("./pythonFifo");
return 0;
}
Dies ist verantwortlich Python Abschnitt zu der FIFO-Warteschlange für das Schreiben.
Der Zweck der zweiten Datei besteht darin, geänderte Informationen aus der ersten Datei zu schreiben.
Wie wäre es, wenn Sie vorschlagen, das Python-Programm asynchron auszuführen? Wäre das nicht der "natürliche" Weg, diesen Stillstand zu lösen? – Alfe
@Alfe - das könnte eine gute Möglichkeit sein, es zu tun, aber ich sehe nicht, wie es der natürlichere Weg ist. Alles hängt von anderen Designproblemen ab, von denen wir nichts wissen. – tdelaney
Ich nahm an, dass 'PyRun_SimpleFile' einen neuen Prozess startet, um den Python-Kram auszuführen, und wartet dann explizit auf die Beendigung des untergeordneten Prozesses. Mehr "natürlich" wäre nicht zu warten, weil wir alle Betriebssysteme verwenden, die Prozesse parallel laufen lassen. Ihre Antwort hat mich jedoch entfremdet. Kann die 'PyRun_SimpleFile' ihre Aufgabe innerhalb des aktuellen Prozesses ausführen? Dann wäre die Verwendung von Fifos im Allgemeinen wahrscheinlich die falsche Wahl. – Alfe