Seite 1 von 1

Python 3.7

Verfasst: Montag 25. Juli 2022, 19:16
von HerBertl
Hallo Zusammen,
vielleicht kann mir jemand weiterhelfen.
Ich habe vorkurzem mit dem Programmieren mit Python begonnen.
Jetzt bin ich auf ein Problem gestoßen.

Code: Alles auswählen

import os
import time, tkinter
from tkinter import *
def buttonStart0Pressed():
    os.system('sudo ip link set can0 up type can bitrate 100000')
def buttonTracePressed():
    os.system('sudo candump -ta any > /home/pi/canbus/candump.log')
def buttonStopPressed():
    os.system('sudo pkill candump')
    os.system('sudo ip link set can0 down')
window = Tk()
label = Label(master=window,
        font=("Arial",8),
        text="Uhrzeit:" + time.asctime())

buttonStart0 = Button(master=window,
                text="Start CAN0 Bitrate 100k",
                font=("Arial",8),
                command=buttonStart0Pressed, 
                width=20,
                fg="black", 
                bg="white")
              
buttonTrace = Button(master=window,
                text="candump any",
                font=("Arial",8),
                command=buttonTracePressed, 
                width=20,
                fg="green", 
                bg="white")
              
buttonStop = Button(master=window,
                text="Stop Trace",
                font=("Arial",8),
                command=buttonStopPressed,
                width=20,
                fg="black", 
                bg="red")
label.pack(side=TOP, padx=2, pady=2)
buttonStart0.pack(side=TOP, padx=2, pady=2)
buttonTrace.pack(side=TOP, padx=2, pady=2)
buttonStop.pack(side=TOP, padx=2, pady=2)
label.pack()

window.mainloop()
Der button Trace bleibt, nachdem ich ihn gedrückt habe, immer bedätigt und der button Stop ist wirkungslos.
Hat jemand eine Idee hierzu?
Gibt es eine Möglichkeit das immer die aktuelle Uhrzeit angezeigt wird?
Vielen Dank im forhinein!

Re: Python 3.7

Verfasst: Montag 25. Juli 2022, 19:21
von __deets__
Das passiert, weil du mit os.system die seit 20 Jahren nicht mehr empfohlene Vorgehensweise zum Start externer Programme benutzt. Und die wartet, bis das Programm beendet ist. Also endlos.

Stattdessen musst du

- subrpocess.run benutzen.
- objektorientiert arbeiten, und das Prozess-Objekt von subprocess.run im Anwendungsobjekt merken.
- mit Timern via dem after-Aufruf arbeiten, um periodische Dinge zu machen, wie zB die Urzeit zu aktualisieren.

Diese Themen werden hier permanent diskutiert, einfach mal ein paar Stunden im tkinter Unterforum stoebern, und die darin gegebenen Hinweise und Code nutzen.

Re: Python 3.7

Verfasst: Montag 25. Juli 2022, 19:23
von HerBertl
Danke für Info!
Schau ich mir an.

Re: Python 3.7

Verfasst: Dienstag 26. Juli 2022, 10:23
von DeaD_EyE
Wenn du mit CAN arbeitest, solltest du dir mal dieses Modul ansehen: https://cantools.readthedocs.io/en/latest/
Die haben auch bereits ein paar Datenbanken, die man einbinden kann. Für Autos ist auch was dabei.