Hallo an alle und erstes Problem mit Python

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo an alle,

    ich heisse Andi und bin noch ganz neu in Sachen RPi.

    Ich habe 2 Geräte. Eines als XBMC Mediacenter von Openelec, da gibts keine Probleme damit.

    Den 2ten Pi als "Spielzeug" um nach 15 Jahren ohne Programmieren (nach der Schule) wieder mal was damit zu machen.

    vorgestellt hab ich mir folgendes:

    Für den ersten Schritt:
    Ein Raupenfahrgestell mit dem Rpi über die Tastatur zu steuern (Bluetooth Tastatur), und in dem Zug auch gleich Python zu lernen (leichte Vorkenntnisse in Borland C und Asambler).

    Jetzt zu meinem Problem:

    Ich möchte Befehle der Tastatur einlesen ohne jedesmal Enter drücken zu müssen. Dafür hab ich mir im WWW einiges durchgelesen und erst mit Curses gespielt, diese aber nicht zum laufen gebracht.
    Dann hab ich mir diese Zeilen geklaut :D

    def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
    tty.setraw(sys.stdin.fileno())
    ch = sys.stdin.read(1)
    finally:
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    return ch

    und bekomme jedes mal FEHLER!!!

    Durch Zufall hab ich dann rausgefunden das es nicht am Python script liegt sonder an der Art wie ich das .py öffne.

    Wenn ich aus dem LXTerminal
    sudo idle 3 shell starte um admin rechte zu haben
    dann im idle3 mein file öffne (tank_test.py) und mit Run Module ausführe, dann klappt es nicht und er motzt weil es fd = stdin.fileno() nicht gibt etc... (genau Fehlermeldung muss ich noch abschreiben.

    Wenn ich aber im Eingabefenster
    python@pi>>> sudo python 3 tank_test.py starte, dann läuft das Programm einwandfei.


    Worann liegt das??????? Ich bin echt ratlos, hab schon eine Woche mit herumsuchen und testen verbracht und durch Zufall heute rausgefunden das ev. eh schon einige Programme lauffähig gewesen wären wenn ich sie aus dem LX Terminal gestartet hätte. (btw wie heisst diese "Linux" Eingabeoberfläche richtig.

    Sorry für den ewig langen Text

    MFG Andi

  • Siehst so aus als ob du die Shebang nicht angegeben hast, wenn du python angiebst weiß er ja womit er ausführen soll. In Linux ist jeder ordner/datei eine datei auch wenn das programm test.pdf heißen würde, würde es funktionieren.

    Probier mal als erste zeile:
    #!/usr/bin/env python
    oder:
    #!/usr/bin/python

    Einmal editiert, zuletzt von Tombo94 (23. Oktober 2014 um 15:41)

  • Bitte füg' deine Quelltexte beim nächsten mal mit Hilfe des code-Tags ein, da er so schlecht lesbar ist.

    Ohne genaue Fehlermeldung kann man nur raten.. Meine Glaskugel sagt, Du solltest dein Python Skript um die Shebang Zeile erweitern (jeweils in die erste Zeile einfügen):

    Code
    #!/usr/local/bin/python

    und es mit

    Code
    chmod +x tank_test.py

    ausführbar machen, falls es das noch nicht ist.


    // Edit: Mist. Zu langsam..

    Einmal editiert, zuletzt von Chris1705 (23. Oktober 2014 um 15:42)

  • Die Shebang ist einfach eine Zeile die angiebt womit er deinen geschrieben Code in Maschinen sprache übersetzen soll... je nach dem wo bei dir python gespeichert ist ist es evtl /usr/ oder local/ etc.

    die umgebung heisst Shell also das eingabefenster.


    MFG,
    Tombo94

  • Hallo

    wow das geht ja rasend schnell hier
    DANKE schon mal:thumbs1:

    das ist der Fehler:

    Traceback (most recent call last):
    File "/home/pi/Tank_test-py", line 24, in <module>
    char = getch()
    File "/home/pi/Tank_test-py", line 13, in getch
    AttributeError: fileno

    [/code]

  • das shebash hab ich eingefüg, ändert nix.



    Hab jetzt mal am Windows PC Python installiert, damit ich nicht immer Monitor hin und her stecken muss.
    Per Putty und WINSCP kann man ja schön die Dateien hin und her schieben.

    Unter windows motzt der Interpreter schon bei der Zeile

    Code
    Traceback (most recent call last):
      File "D:\EIGENE DATEIEN\Dokumente\Raspberry pi\Tank_test.py", line 3, in <module>
        import RPi.GPIO as GPIO
    ImportError: No module named 'RPi'

    also er kennt das Modul nicht, ich blick nicht durch, bin glaub ich schon zu lang weg von dem Zeug.

    Einmal editiert, zuletzt von Galaxyq (23. Oktober 2014 um 16:20)

    • Offizieller Beitrag

    Dein Windows PC hat keine GPIO und deswegen gibts auch das python modul für windows nicht. du muss das Script schon auf dem Pi starten. Die Fehlermeldung kommt imho davon das irgendwas stdin/out/error überschreibt. Schau dir mal pygame zum abfangen des Tastendrucks an.

  • Ich bekomms einfach nicht hin. Ok, die Programme laufen ja

    so kann ich das Programm starten

    Code
    pi@raspberrypi ~/tank $ sudo python3 Tank-v2.py

    Ausführbar hab ich die Datei schon gemacht.

    Was muss ich eingeben ohne immer das python3 mit angeben zu müssen

    Fehler wird folgender angezeigt:

    Code
    pi@raspberrypi ~/tank $ ./ Tank-v2.py
    -bash: ./: Ist ein Verzeichnis



    Hier noch ein Versuch

    Code
    pi@raspberrypi ~/tank $ . Tank-v2.py
    -bash: import: Kommando nicht gefunden.
    -bash: import: Kommando nicht gefunden.
    -bash: import: Kommando nicht gefunden.
    -bash: Tank-v2.py: Zeile 7: Syntaxfehler beim unerwarteten Wort `GPIO.BCM'
    -bash: Tank-v2.py: Zeile 7: `GPIO.setmode(GPIO.BCM)'

    Einmal editiert, zuletzt von Galaxyq (25. Oktober 2014 um 10:44)


  • Was muss ich eingeben ohne immer das python3 mit angeben zu müssen

    Den korrekten Pfad zum Skript. Entweder "relativ" vom aktuellen Verzeichniss (./) aus oder "absolut" von der Wurzel (/) ausgehend.


    Fehler wird folgender angezeigt:

    Code
    pi@raspberrypi ~/tank $ ./ Tank-v2.py
    -bash: ./: Ist ein Verzeichnis

    Zwischen "./" und "Tank-v2.py" darf KEIN Leerzeichen stehen.

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (25. Oktober 2014 um 11:03)

Jetzt mitmachen!

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