Anfänger Frage (Variablen, if, else)

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
ertlflorian1
User
Beiträge: 1
Registriert: Dienstag 21. Juli 2015, 19:46

Hi liebe Community,

bin nun auf die aufregende Welt von Python gestoßen. Hatte vorher nur ein bisschen in Lua (unbekannte Scriptsprache für Spiele gescriptet),
habe allerdings ein wenig Schwierigkeiten da man Lua und Python gar nicht vergleichen kann.



Also beim Ausführen soll überprüft werden ob die Datei laststate.txt unter /home/pi/div existiert,

wenn nein soll die Datei erstellt werden und "off" in die Datei geschrieben werden.

dann
wenn in der Datei "off" steht soll dies auf "on" umgeschrieben werden und per os.sytem was ausgeführt werden
wenn in der Datei "on" steht soll dies auf "off" umgeschrieben werden und per os.sytem was ausgeführt werden

Code: Alles auswählen


if not fileExists (home/pi/div/laststate.txt):
        fileCreate (home/pi/div/lastate.txt)
             fileWrite ("home/pi/div/lastate.txt", "off")
end


if fileRead (home/pi/div/lastate.txt == "off"):
        lightstate = "on"
        os.system("sudo sh /home/pi/433flo/off2.sh")
else:
        lightstate = "off"
        os.system("sudo sh /home/pi/433flo/on2.sh")


Ich möchte es in eine txt Datei schreiben da ich es nach einem Neustart gerne gespeichert hätte.
Habs nun mal irgendwie geschrieben so das ihr denn Sinn versteht :?


Würde mich sehr über Hilfe freuen, Danke im voraus
BlackJack

@ertlflorian1: Und was ist jetzt die Frage? Ob das jemand für Dich schreiben kann? Theoretisch ja, aber ob dazu jemand Lust hat…

Oder ob Du das schreiben kannst ohne Dir die Zeit zu nehmen die Python-Grundlagen zu lernen? Dann wäre die Antwort Nein, das geht nicht.

Arbeite ein Python-Tutorial durch, zum Beispiel das in der Python-Dokumentation, und versuch's dann einfach mal. Wenn es konkrete Probleme gibt, dann stell konkrete Fragen zu Deinem Quelltext.

So allgemein solltest Du Funktionen verstanden haben und schreiben und verwenden. Und Ausnahmebehandlung, denn der Test ob die Datei existiert wäre „unpythonisch”. In Python würde man die Datei einfach auslesen und sinnvoll auf eine Ausnahme reagieren wenn sie nicht existiert. Man würde sie an der Stelle auch nicht anlegen weil sie kurz danach ja sowieso neu beschrieben wird.

`os.system()` sollte man nicht verwenden. Dessen Dokumentation hat einen Verweis auf das `subprocess`-Modul, das zum ausführen von externen Prozessen da ist.

Generelles Prinzip beim Programmieren: „Don't Repeat Yourself” (DRY). Code und Daten sollten nicht wiederholt werden. Einen Dateinamen schreibt man nur *einmal* und nicht viermal. Den bindet man an einen Namen. Dann ist auch sichergestellt das an den drei Stellen wo er verwendet wird, auch tatsächlich dreimal der selbe Dateiname benutzt wird und nicht an einer Stelle ein anderer weil man sich vertippt hat.
BlackJack

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import errno
import os
from subprocess import check_call

STATES = ON, OFF = 'on', 'off'
STATE_FILENAME = '/home/pi/div/laststate.txt'
SCRIPT_BASE = '/home/pi/433flo'
ON_SCRIPT = os.path.join(SCRIPT_BASE, 'on2.sh')
OFF_SCRIPT = os.path.join(SCRIPT_BASE, 'off2.sh')


def read_state(filename):
    try:
        with open(filename, 'r') as state_file:
            content = state_file.read().strip()
            if content not in STATES:
                raise ValueError('unknown state {0!r}'.format(content))
            return content == ON
    except OSError as error:
        if error.errno == errno.ENOENT:
            return False
        else:
            raise


def write_state(filename, state):
    with open(filename, 'w') as state_file:
        state_file.write((ON if state else OFF) + '\n')


def main():
    state = read_state(STATE_FILENAME)
    check_call(['sudo', 'sh', (OFF_SCRIPT if state else ON_SCRIPT)])
    write_state(STATE_FILENAME, not state)


if __name__ == '__main__':
    main()
Antworten