Python script über rules starten - aktion wenn USB-Stick eingesteckt wird

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo!

    ich versuche ein Python Script zu starten, wenn ein USB-Stick eingesteckt wird.

    Das ganze funktioniert auch zum Teil.

    Ich habe die Regel "/etc/udev/rules.d/91-usb-mount.rules" erstellt:

    Code
    ACTION=="add",ENV{DEVTYPE}=="usb_device",ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/pi/.Xauthority",RUN+="/usr/bin/python /home/pi/python/usb.py rein"
    ACTION=="remove",ENV{DEVTYPE}=="usb_device",ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/home/pi/.Xauthority",RUN+="/usr/bin/python /home/pi/python/usb.py raus"

    zum testen sah mein Script so aus:

    Python
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import os
    import sys
    os.system("echo \"$(date) usb stick "+sys.argv[1]+"\" >> /tmp/usbstick.log")

    was funktioniert hat.

    Nun habe ich folgendes Ergänzt:

    Python
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import os
    import sys
    import requests
    log_id  = "XXX"
    chat_id = "XXX"
    parse_mode = "HTML"
    requests.get("https://api.telegram.org/bot"+log_id+"/sendMessage?chat_id="+chat_id+"&parse_mode="+parse_mode+"&text=+str(sys.argv[1]))

    wenn ich das Script einzeln teste funktioniert es. Als Sudo und als Pi. Jedoch automatisch funktioniert es nicht. Im Syslog taucht "systemd-udevd[22762]: 3-1: Process '/usr/bin/python /home/pi/python/usb.py rein' failed with exit code 1."

    auf.

    Ich vermute dass mein Rule-Eintrag nicht ordentlich ist (habe ich mir ehrlich gesagt auch nur zusammen gegoogelt).

    Kann mir jemand weiterhelfen?

    Danke schonmal! :)

  • Python script über rules starten - aktion wenn USB-Stick eingesteckt wird? Schau mal ob du hier fündig wirst!

  • Im Syslog taucht "systemd-udevd[22762]: 3-1: Process '/usr/bin/python /home/pi/python/usb.py rein' failed with exit code 1."

    auf.


    Ich vermute dass mein Rule-Eintrag nicht ordentlich ist

    Nein, die Fehlermeldung sagt, dass das Skript aussteigt.

    wenn ich das Script einzeln teste funktioniert es.

    Das kann nicht funktionieren, solange ein " nach &text= fehlt. ;)

    Btw. Python2 ist mausetot!

  • Hallo,

    ich würde das ganze vollständig mit Python lösen. Für das Erkennen von USB-Geräten gibt es zum Beispiel pyudev.

    Strings puzzelt man übrigends nicht mit '+' zusammen. Hier würde sich ein f-String anbieten:

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Zitat

    Das kann nicht funktionieren, solange ein " nach &text= fehlt. ;)

    das habe ich beim kopieren ins Forum ausversehen mit entfernt.

    Auch mit dem " funktioniert es einzeln, aber nicht über die rule

    Zitat

    Btw. Python2 ist mausetot!

    Das Script wird mit Python3.8 ausgeführt.

  • Keine Ahnung ob es besser ist.

    Der Unterschied ist jedenfalls folgender:

    Das Programm läuft durchgehend weiter und wird nicht erst durch ein Ereignis gestartet.

    Es wird auf das Ereignis in der Schleife gewartet und solange nichts passiert, wartet der.

    Falls der Code eingesetzt wird, sollte man sich auf jeden Fall die Doku zu pyudev ansehen.

  • Das Script wird mit Python3.8 ausgeführt.

    Wo ist das eingetragen, damit das auch aus der udev-Regel heraus als Python3 gestartet wird? In der .bashrc?

    Setz den Shebang richtig (#!/usr/bin/env python3), mach das Skript ausführbar und lass in den rules /usr/bin/python vor dem Skriptpfad weg, denn dann wird das (sehr wahrscheinlich erst) mit Python3.8 ausgeführt.


    //Edit: Sieh Dir das Skript von Dennis89 auch mal an, wenn Du nicht ein Skript (das von @DeaD_EyE) durchgehend laufen lassen willst.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!