Message von Python an Pascal

Für Installationen unter Windows
Antworten
Aloxen
Beiträge: 58
Registriert: Di 31. Mai 2022, 17:40

Message von Python an Pascal

Beitrag von Aloxen »

Hi
ich habe einen kleinen Sprachassistent geschrieben der z.b. Internetsuchen durchführt oder eine Wetter API abfragt. Da SpeechToText mit Lazarus für mich nicht realisierbar war habe ich mit Python ein kleines Programm geschrieben, das, wenn es gestartet wird die Speechengine von Google nutzt und das Resultat in einer .txt Datei speichert.


AssignFile(DateiStatus,'Status.txt');
Rewrite(DateiStatus);
Writeln(DateiStatus,V);
CloseFile(DateiStatus);
Status:=TStringlist.Create;


AProcess := TProcess.Create(nil);

AProcess.Executable:= 'STT_Extanded';

// An das Programm soll der Parameter -h übergeben werden:
AProcess.Parameters.Add('-h');

// AProcess.Options := AProcess.Options + [poWaitOnExit]; <--- wenn ich das Programm mit dieser Zeile Aktiv Starte wird das Programm während dem Ausführen der Exe unterbrochen
AProcess.Execute; //Dadurch kann ich aber während dem Aufnehmen nichts auf dem Fenster verändern
AProcess.Free;

STT := TStringList.Create;
STT.LoadFromFile('Textdatei.txt');
result:= STT[0];


Gleichzeitig schreibt Python den Aktuellen Status in eine Status.Txt. Es war ein versuch von mir die kommunikation zwischen beiden Programmen zu ermöglichen aber was ich erst jetzt herrausgefunden habe ist, dass es abstürzt wenn pyton und Lazarus gleichzeitig auf die Status.txt zugreifen.

Meine Lösung für das Problem war das ich das Lazarus Programm während der Ausführung des Python Programms gestoppt habe (poWaitOnExit), allerdings kann ich dann keine Änderungen in dem eigentlichen Programm anzeigen sowa wie "Sprehen sie Jetzt" oder so.

Wie schaffe ich es eine einfache Kommunikation von python zu Lazarus aufzubauen die darin besteht, dass python dem Lazarus Programm sagt, in welchem Stadium(Aufnehmen, Verarbeiten,Fertig) das Python Programm sich befinden, damit ich dann den Text Aus der Textdatei.txt auslesen kann.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Message von Python an Pascal

Beitrag von Winni »

Hi!

Vom Linux OS geklaut:

Du definierst einen Dateinamen und ein Verzeichnis.

Diese Datei ist die Lock-Datei

Die beidseitige Logik:

Wenn die Lockdatei existiert:
Warten bis sie nicht mehr existiert

else

LockDatei anlegen
Textdatei schreiben
LockDatei löschen


Fertig

Winni

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Message von Python an Pascal

Beitrag von hum4n0id3 »

Ich würde es entweder über eine Datenbank realisieren, oder eine API.

Aloxen
Beiträge: 58
Registriert: Di 31. Mai 2022, 17:40

Re: Message von Python an Pascal

Beitrag von Aloxen »

Hi die Idee ist echt cool aber ich habe noch nicht ganz verstanden was ich genau machen muss. Muss ich eine extra datei erstellen lassen mit python und diese nach dem Skript wieder löschen oder soll ich die Datei wo mein Text gespeichert ist Lock(en)?
In python würde ich es dann so schreiben:

Code: Alles auswählen

with FileLock("myfile.txt"):
    datei = open('myfile.txt', 'w')
    datei.write('Locked')
    print("Lock acquired.")

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Message von Python an Pascal

Beitrag von Winni »

Hi!

Die Lockdatei ist eine extra Datei, deren Zweck darin besteht, zu signalisieren, ob Du die TextDatei anfassen darfst, oder ob ein anderer Process /User darin gerade arbeitet.

Pascal:

Code: Alles auswählen

uses ....fileutil;

const LockFile = './lockfile.lock';
...      var f: file;

while FileExists(LockFile) do sleep (100);

assignFile(f,lockFile);
rewrite (f);
closeFile(f);
/// jetzt in  Deine Textdatei schreiben
deleteFile (lockFile);
...
Winni

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Message von Python an Pascal

Beitrag von PascalDragon »

Aloxen hat geschrieben:
Di 31. Mai 2022, 18:00
ich habe einen kleinen Sprachassistent geschrieben der z.b. Internetsuchen durchführt oder eine Wetter API abfragt. Da SpeechToText mit Lazarus für mich nicht realisierbar war habe ich mit Python ein kleines Programm geschrieben, das, wenn es gestartet wird die Speechengine von Google nutzt und das Resultat in einer .txt Datei speichert.
Du könntest alternativ auch mit Hilfe von Python 4 Delphi (bzw. mit dem Fork Python for Lazarus, welches mehr Plattformen unterstützt) direkt dein Skript ausführen (mit eventuellen Anpassungen, so dass du gar keine Datei mehr brauchst).
FPC Compiler Entwickler

Antworten