ctrl + c über script

Begonnen von satprofi, 06 Oktober 2025, 20:45:33

Vorheriges Thema - Nächstes Thema

satprofi

Hallo.
Habe hier ein ext. script, das zum beenden ctrl + c über tastatur verlangt. wie kann ich das aber automatisch erledigen lassen?
das script erneuert einen token, und solange es nicht beendet ist kann man sich mit fhem dort nicht einloggen.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Guybrush

wie rufst du das denn auf? ext. script kann ja alles mögliche heissen.. unter linux wäre das zb einfach mit "kill -INT <pid>"

satprofi

normales python script mit option, das den token ausgibt, zwecks kopie nehm ich an. ich sende den an fhem. wie stell ich das mit deinem Vorschlag an?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

passibe

Kannst du das Skript nicht anpassen und eine non-interactive flag hinzufügen oder so?

Zitat von: satprofi am 06 Oktober 2025, 22:28:09wie stell ich das mit deinem Vorschlag an?
PID rausfinden, dann den kill-Befehl schicken. Siehe auch https://stackoverflow.com/a/5789674

Aber ja, poste mal, wie du das Skript aus FHEM heraus aufrufst bzw. häng das vielleicht mal an. Eigentlich sollte das recht unproblematisch gehen, das einfach so stoppen zu lassen, nachdem es 1x den Token ausgegeben hat.

betateilchen

Zitat von: satprofi am 06 Oktober 2025, 22:28:09normales python script mit option, das den token ausgibt,

Lässt sich das script nicht in perl nachbauen?
Dann könnte man das einfach in eine Funktion in der 99_myUtils.pm packen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

satprofi

es geht um diesen abschnitt
run_credentials_only(self)
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Guybrush

also grundsätzlich müsste das in bash so gehen:

myscript.sh anlegen (oder anderer name) mit exec flag
#!/bin/bash
python <script> &
wait 10
kill -INT $!

die datei dann ausführen. das startet dein python skript im hintergrund, wartet dann 10s und killt den python prozess dann. wartezeit musst du entsprechend anpassen wie lamg dein skript läuft + reserve. ist ungetestet, aber sollte so gehen. wäre aber deutlich besser, wenn du das python skript selbst anpassen würdest. da wird mutmaßlich am ende des skripts ein try/catch auf input sein, was bestimmt einfach auskommentierbar ist.

satprofi

datei angelegt

#!/bin/bash
python /home/beelink/bmw-cardata-streaming-poc/main.py --credentials-only &
wait 3
kill -INT $!

ergibt das:

beelink@beelink-MINI:~$ /home/beelink/bmw-cardata-streaming-poc/token.py
-bash: /home/beelink/bmw-cardata-streaming-poc/token.py: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

passibe

Also das Skript sieht ja eigentlich schon irgendwie vor, dass es den Token laufend aktualisiert? Wie machst du das denn aktuell, immer von Hand oder regelmäßig über ein at?

Mein Vorschlag wäre (natürlich ungetestet):

Diese os.system-Befehle, wo du die Daten an FHEM übermittelst (auch?) in on_token_refresh packen und das Skript dann einfach per systemd immer im Hintergrund laufen lassen. Die dazu erforderliche --credentials-only-Flag nutzt du ja ohnehin schon.

Alles andere ist angesichts dessen, dass das Skript sowieso schon eine eingebaute Aktualisierung beinhaltet, ziemlich unsauber und – wie du siehst – fehleranfällig.

satprofi

also ich habe einen mqtt client angelegt, mit bmw server connected. wenn der state auf disconnected geht, startet ein notify das script aus main.py. der übermittelte token wird für neuerliche anmeldung am server verwendet. da nur 1 verbindung erlaubt ist, muss das main.py beendet werden, sonst kann sich fhem nicht zum server verbinden.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram