zwei Programme in einem Programm

  • Hallo zusammen,

    ich bin Neuling und hab mir einige Programm angeguckt und auch umgeändert und sie funktionieren immer noch.
    Nun würde ich aber gerne zwei Pythonprogramme in einem Pythonprogramm zusammen führen (ohne eine Variablenübergabe).
    Habe diese hier

    # Anzeigen das Raspberry läuft

    import RPi.GPIO as GPIO
    import time

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(23, GPIO.OUT)

    while True:
    GPIO.output(23, True)
    print 'LED on'
    time.sleep(2)
    GPIO.output(23, False)
    print 'LED off'
    time.sleep(2)

    und das Programm:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    # Import der Module
    import sys
    import os

    # 1-Wire Slave-Liste lesen
    file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
    w1_slaves = file.readlines()
    file.close()

    # Fuer jeden 1-Wire Slave aktuelle Temperatur ausgeben
    for line in w1_slaves:
    # 1-wire Slave extrahieren
    w1_slave = line.split("\n")[0]
    # 1-wire Slave Datei lesen
    file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
    filecontent = file.read()
    file.close()

    # Temperaturwerte auslesen und konvertieren
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    temperature = float(stringvalue[2:]) / 1000

    # Temperatur ausgeben
    print(str(w1_slave) + ': %6.2f °C' % temperature)

    sys.exit(0)

    Habe dann das Programm "Anzeigen das Raspberry läuft" mitels "import"-Befehl in das andere "gesteckt". Also "import betrieb" (so heißt die Datei betrieb.py)
    Leider läuft wohl nur "Anzeige das Rasberry läuft" auf der Shell, also LED An, LED Aus...

    Was mache ich falsch und wie kann man es "schöner" machen. Also wie machen es die Profis?

    Danke!
    David

    Wenn du nicht irrst, kommst du nicht zu Verstand! (Goehte) :angel:

    • Offizieller Beitrag
    Zitat

    Was mache ich falsch und wie kann man es "schöner" machen. Also wie machen es die Profis?


    Zuerst packt man seinen Code in Code Tags ;)
    [code=php]
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    import time

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(23, GPIO.OUT)

    while True:
    GPIO.output(23, True)
    print 'LED on'
    time.sleep(2)
    GPIO.output(23, False)
    print 'LED off'

    with open('/sys/devices/w1_bus_master1/w1_master_slaves', "r") as file:
    w1_slaves = file.readlines()

    # Fuer jeden 1-Wire Slave aktuelle Temperatur ausgeben
    for line in w1_slaves:
    # 1-wire Slave extrahieren
    w1_slave = line.split("\n")[0]
    # 1-wire Slave Datei lesen
    with open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave') as file:
    filecontent = file.read()

    # Temperaturwerte auslesen und konvertieren
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    temperature = float(stringvalue[2:]) / 1000

    # Temperatur ausgeben
    print(str(w1_slave) + ': %6.2f °C' % temperature)
    time.sleep(2)

    [/php]
    Beim File = open, kannst du with nutzen, das kümmert sich um den ganzen rest, wie du siehst muss man das file dann auch nicht mehr manuell schliessen
    Da ich nicht weiss wann die Leds blinken soll, blinken sie am Anfang.

  • Hallo dbv,

    die Tag finde ich unter dem #-Zeichen hier im "deine Nachricht"Browser?

    Die LED soll immer Blinken so lange das gesamte Programm läuft. Also von ausen mir anzeigen, dass es läuft. Ansich brauche ich die print-Befehle bei der LED nicht, war halt zum üben. :)
    Das sys.exit würde ich dann raus nehmen, damit das Programm immer wieder durchläuft.
    Ist dann der with-Befehl der richtige?

    Ich hatte mir das auch mit dem "def"-Code[/code] angeguckt, aber das verstehe ich nicht. :(

    Wenn du nicht irrst, kommst du nicht zu Verstand! (Goehte) :angel:

    • Offizieller Beitrag

    Sie blinkt ja jetzt solange solanage das Script läuft. Blinken - Files lesen -und wieder von vorne.
    im grossen Editor hast du oben rechts die Buttons für "formatierten Code einfügen", formatiertes php code einfügen.

    Im kleinen Editor, sprich der schnellantowrt kannst du
    [ code ] [ /code ] bzw. [ php ] [ /php] nutzen (leerzeichen entfernen)

    Das mit dem def code versteh ich in diesem Zusammenhang nicht.

  • Hallo,

    das def-Code war schon die Erweiterung meiner Vorstellung. :) Ich will namlich später ein Hauptprogramm mit Unterprogrammen haben. Das Hauptprrogramm soll dann nur alle Module enthalten,
    - Modul Blinken
    - Modul Temperatur
    - Modul Datenbank.

    Ich weiß, es wäre einfacher wenn ich alles in ein schreibe, aber wer will schon einfach. ;)

    Und da ich da schon gesucht hatte und diese def-Codes (http://www.python-kurs.eu/modularisierung.php unter Eigene Module) aber es nicht verstehe, hatte ich das mal ins Spiel gebracht. Denn später muss das Modul Temperatur dem Modul Datenbank natürlich Temperaturwerte übergeben. :D


    .... ach jetzte habe ich es. Das def hat gar nichts mit den Modulen zu tun. Es difiniert nur bestimmte abläufe (Formeln) die man aufrufen kann....oder?

    Wenn du nicht irrst, kommst du nicht zu Verstand! (Goehte) :angel:

    Einmal editiert, zuletzt von Dave1976 (5. Februar 2015 um 11:22)

    • Offizieller Beitrag

    def definiert funktionen ;), diese nutzt man wenn man bestimmte Sachen mehrmals im Code aufrufen will bzw um sachen logischen zu gliedern

    [code=php]
    def Summe(summand1, summand2):
    return summand1+summand2

    meineSumme = Summe(4,5)
    print meineSumme
    9[/php]

  • Da hat sich meine Erkenntnis mit euer erklärung überschnitten. Aber damit wäre das nun klar. :bravo2:

    Aber nun die Frage kann ich ein Hauptprogramm machen:

    Code
    import betrieb
    import temperatur

    und dann laufen die Unterprogramme immer reihenweise ab?
    Kann ich dann mit "return" auch Werte ins Hauptprogramm und dann in einem anderen Unterprogramm nutzen.

    Ich glaube ich will wieder direkt alles anstatt nach einandere es auszuprobieren. :stumm:

    (guck mal...habe gelernt ;) )

    Wenn du nicht irrst, kommst du nicht zu Verstand! (Goehte) :angel:

    • Offizieller Beitrag

    Mit import importierst du Funktionen, Klassen, Variablen aus anderen Modulen (anderen Scripten). Aber ja, das was du willst geht. Hier mal ein vereinfachtes Beispiel:
    [code=php]
    def betrieb():
    #mach irgendwas
    return ergebnis
    def temperatur():
    #messe irgendwas
    return temp
    def main():
    #ich bin das hauptprogramm
    while True:
    aktuelleTemp = temperatur()
    print aktuelleTemp
    if __name__ == "__main__":
    main()[/php]

  • Hallo,

    `import` führt gar nichts aus, sondern importiert nur die Klassen / Funktionen / Variablen / ... ins Hauptprogramm, wo diese dann verfügbar sind. In welcher Reihefolge du die dann aufrufst liegt bei dir.

    Tipp: das sind absolute Grundlagen, das brauchst du immer wieder, weil das "Tagesgeschäft" in Python ist. Also vielleicht doch noch mal das offizielle Python-Tutorial durcharbeiten (Link), da wird das im Abschnitt "Modules" erklärt.

    Gruß, noisefloor

Jetzt mitmachen!

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