Python 3.7

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
HerBertl
User
Beiträge: 3
Registriert: Montag 25. Juli 2022, 18:18

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!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
HerBertl
User
Beiträge: 3
Registriert: Montag 25. Juli 2022, 18:18

Danke für Info!
Schau ich mir an.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1244
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten