Ankündigung

Einklappen
Keine Ankündigung bisher.

'Pip install' von Bibliotheken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 'Pip install' von Bibliotheken

    Ich möchte um Rat fragen, damit ich meinen Loxberry nicht kompromittiere.

    Ich habe ein Skript, das meinen Router nach Statistiken durchsuchen sollte. Ich glaube, es sollte eine Textdatei in das Installationsverzeichnis zurückgeben.

    Technicolor VDSL Mode Stat Scraper. Contribute to mswhirl/TechnicolorStatScraper development by creating an account on GitHub.


    Der Leitfaden sagt zu 'Pip install' die folgenden Bibliotheken -

    Robobrowser,
    html2text
    und eventuell urllib3

    Ich habe noch nichts installiert. Gibt es etwas, worauf ich als Linux-Neuling achten sollte?
    Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

  • #2
    Kannst du ruhig installieren.
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar


    • Tico
      Tico kommentierte
      Kommentar bearbeiten
      Danke.

  • #3
    Ich habe die benötigten Bibliotheken installiert. Das Skript läuft erfolgreich auf dem Loxberry vom Terminal aus. Es gibt die erforderlichen Statistiken über die Internet-Upload-Geschwindigkeit, Download-Geschwindigkeit usw. zurück. Bild angehängt.

    Im Miniserver habe ich'Command for ON' -

    /legacy/technicolour/modem-technicolour-httpstats.py

    Ich habe auch 'HTTP-Antwort speichern' als -
    /user/common/answer.txt

    Ich kann die virtuelle Ausgabe auslösen und answer.txt in einem Browser öffnen.

    Der angezeigte Text ist der Inhalt des Python-Skripts.

    Ist das absichtlich so? Habe ich eine falsche Annahme getroffen, was 'HTTP-Antwort speichern' macht?

    Ich bemerke aus Zeile 80 des Skripts, es lautet -


    # Save and open in default text editor if you are on windows
    if sys.platform.startswith("win"):
    outfile = os.path.join(os.environ['TEMP'], 'modemstats.txt')
    out = open(outfile, 'w+')
    out.write(str(data))
    out.close()
    os.startfile(outfile)
    Zuletzt geändert von Tico; 16.12.2018, 04:36.
    Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

    Kommentar


    • #4
      Ja, das ist in sofern normal, dass Du von der console aus ja mit vorgesetztem python <filename> das Programm angibst mit welchem die Datei xxx.py verarbeitet wird. Wenn Du im Browser einfach ein python Script vom Webserver abrufst und der Webserver gar nicht weiß was er damit machen soll, liefert er halt das Script als solches aus. Du müsstest dem Apache (Webserver auf dem Loxberry) erst einmal beibringen, dass er xxx.py Dateien mit python ausführen und das Ergebnis dann streamen soll. Am Apache auf dem Loxberry herumzuschrauben ist vllt keine gute Idee. Als workarround vllt aus einer php Datei aus das python über die shell ausführen und so das Ergebnis zurückliefern.

      Ich würde das Ergebnis auch nicht speichern, sondern den virtuellen HTTP-Eingang nutzen und die Werte dann direkt verarbeiten.

      Gruß Sven
      Zuletzt geändert von svethi; 16.12.2018, 05:46.
      Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

      Kommentar


      • #5
        Tico
        Schreibe Mal in die erste Zeile deines Scripts
        Code:
        #!/usr/bin/env python3
        ​​​​​​
        Das genügt vielleicht schon.

        Oder erstelle ein Bash-Script:
        Code:
        #!/bin/bash
        python modem-technicolour-httpstats.py > /dev/udp/192.168.1.77/10123
        Das sollte deinen Output per UDP an die Miniserver-Adresse Port 10123 senden.
        Mit einem UDP-Eingang und Befehlserkennung kommst du zu den Daten.


        LG Christian
        Zuletzt geändert von Christian Fenzl; 16.12.2018, 07:47.
        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

        Kommentar


        • svethi
          svethi kommentierte
          Kommentar bearbeiten
          Das python-Script müsste dann aber auch mit Shebang mindestens im CGI Verzeichnis liegen.

      • #6
        Ich habe sowohl Python als auch Python3 im Terminal ausprobiert.

        python3 erzeugt einen Fehler.
        python ist erfolgreich.

        Ich habe den Shebang hinzugefügt. Es gibt immer noch den gleichen Text aus.
        Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

        Kommentar


        • #7
          Probier es mit der Bash-Variante
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar


          • #8
            Machts doch einfach anstatt des bash-Scriptes mit PHP ;-)
            Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

            Kommentar


            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Ich dachte, du stehst auf Einzeiler? 😉

            • svethi
              svethi kommentierte
              Kommentar bearbeiten
              Geht nicht immer :-). Aber vielleicht tatsächlich mit shebang als xxx.cgi im cgi Verzeichnis

          • #9
            Ich kämpfe immer noch.....

            Arbeiten - UDP-Eingänge, Befehlserkennung, Trigger mit Terminal.
            Funktioniert nicht - Auslöser vom Miniserver

            Bash-Skript namens routerstats =

            Code:
            #!/bin/bash
            python modem-technicolour-httpstats.py > /dev/udp/10.1.1.3/7039

            Ich hatte Befehle, die vom Terminal aus funktionierten.

            ./routerstats
            bash routerstats

            Befehle, die nicht funktionierten
            routerstats (Befehl nicht gefunden)

            Ich habe dann eine Datei in /opt/loxberry namens .bash_profile erstellt. Der Inhalt -

            Code:
            export PATH=$PATH:/opt/loxberry/webfrontend/legacy/technicolour/
            routerstats funktionieren nun vom Terminal aus selbstständig.

            Ich habe so viele Varianten für 'Command for ON' ausprobiert, dass ich glaube, dass meine SD-Karte dabei ist, mich zu schlagen.

            Wie viele Varianten kann ich noch ausprobieren mit?

            Code:
            /legacy/technicolour/routerstats
            Zuletzt geändert von Tico; 17.12.2018, 04:50.
            Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

            Kommentar


            • #10
              Die Änderungen in .bash_profile werden beim nächsten LoxBerry Update gelöscht!
              ​​https://www.loxwiki.eu/display/LOXBE...erry+betreiben

              Code:
              ​
              #!/bin/bash
              cd /opt/loxberry/webfrontend/legacy/technicolour  
              python modem-technicolour-httpstats.py > /dev/udp/10.1.1.3/7039 ​​​​​​
              Verstehe ich richtig:
              - Aufruf von der Shell funktioniert - die Daten kommen an?
              - Aufruf vom Miniserver funktioniert NICHT?

              Wie sieht dein Aufruf im Miniserver aus?

              LG, Christian
              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

              Kommentar


              • #11
                Richtig - Anrufe von der Shell funktionieren. Die Daten kommen an.
                Richtig - Anrufe vom Miniserver funktionieren nicht.

                Der Aufruf aus der Shell ist -

                Code:
                loxberry@loxberry:~$ routerstats
                Der Anruf vom Miniserver, der versucht wurde, ist -

                Code:
                /legacy/technicolour/routerstats
                Code:
                /opt/loxberry/webfrontend/legacy/technicolour/routerstats
                Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                Kommentar


                • #12
                  Leute!! Wie oft denn noch? Nichts, was nicht in einem CGI-BIN Verzeichnis ist, wird NICHT vom Apache ausgeführt.
                  Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                  Kommentar


                  • Tico
                    Tico kommentierte
                    Kommentar bearbeiten
                    Ich habe das bash-Skript bereits im CGI-Verzeichnis ausprobiert. Das hat nicht funktioniert.

                  • svethi
                    svethi kommentierte
                    Kommentar bearbeiten
                    Außerhalb vom CGI gehts aber definitiv nicht. Hast Du als Endung auch .cgi mal probiert?

                  • Tico
                    Tico kommentierte
                    Kommentar bearbeiten
                    Ich habe das bash-Skript in das Verzeichnis /webfrontend/cgi/bin/ verschoben.

                    Ich habe den 'Befehl for on' als -
                    /cgi/bin/routerstats.cgi

                    Kein Glück mit der .cgi Erweiterung.

                • #13
                  Habt Ihr jetzt lang genug gebastelt und versucht es jetzt mal mit php?

                  Lege eine php Datei an (z.B.) test.php im Legacy Ordner an. Mit dem Inhalt

                  PHP-Code:
                  <?php
                  echo exec('python modem-technicolour-httpstats.py');
                  ?>
                  Das Python Script kommt ohne shebang auch in legacy. Dann legst Du im MiniServer einen virtuellen http Eingang an mit der URL zur php-Datei. Im http Eingang legst Du die Befehlserkennungen so an wie im UDP und schon gehts.
                  Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                  Kommentar


                  • #14
                    Ich habe mir nun mal Eure Lösung genauer angeschaut. Das Problem ist nicht, dass python über den Apache nicht funktioniert. Das Problem ist die Ausgabe des Python-Scripts. Über den Webserver muss zwingend der Content-Type angegeben werden, was das Python-Script nicht tut. Eine Möglichkeit ohne PHP und Bashscript wäre ...
                    Das Python Script in .cgi umbenennen, shebang hinzufügen, Rechte korrekt setzen und nach der shebang print("Content-type: text/html\n\n") einfügen.
                    Dann sollte das Script auch direkt aufrufbar sein.
                    Oder per Bash script mit senden an UDP ... Möglichkeiten gibt es genug

                    Gruß Sven
                    Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                    Kommentar


                    • #15
                      Tico what about your problem. Could you fix it now?
                      Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                      Kommentar


                      • Tico
                        Tico kommentierte
                        Kommentar bearbeiten
                        Danke Svethi für deine Hilfe, aber ich konnte es immer noch nicht zum Laufen bringen.

                        Ich habe so viel Zeit damit verbracht, dass ich jetzt eine Pause einlegen muss. Ich werde in ein paar Wochen mit "frischen Augen" darauf zurückkommen und erneut angreifen.
                    Lädt...
                    X