@Willhelm: Ich habe so ein bisschen das Gefühl Du nimmst fertige Quelltextschnippsel die Du nicht verstehst und probierst dann wild herum. So funktioniert programmieren nicht. Man sollte schon verstehen wie Grundlagen der Sprache funktionieren, zum Beispiel sollte eigentlich klar sein warum Deine Zeile 6 einfach keinen Sinn macht. Und dann die verwendeten Bibliotheken. Bei `pyinotify` muss man sich mal durch die Dokumentation arbeiten und wohl auch durch die von der inotify-API selbst um zu verstehen wie das funktioniert und auch was die Werte bedeuten die man da bei den Funktionen/Methoden angeben kann. IN_MODIFY ist zum Beispiel für Deinen Fall nicht das richtige.
Bei der Beschreibung was Du erreichen willst, sehe ich nicht wofür man `subprocess` benötigt‽
Auslösen wenn file in Ordner abgelegt wird
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wenn du nur das Relay schalten willst, dann mach doch auch nur das:
Wobei du vielleicht besser auf `pyinotify.IN_CREATE` achten solltest statt auf `pyinotify.IN_MODIFY`. Letzteres wird auch bei jeder Aenderung (evtl auch Loeschung?) aufgerufen.
Code: Alles auswählen
import pifacedigitalio as p
import pyinotify
p.init()
def onChange(ev):
p.digital_write(0,1)
wm = pyinotify.WatchManager()
wm.add_watch('/home/pi/Watchit', pyinotify.IN_MODIFY, onChange)
notifier = pyinotify.notifier(wm)
notifier.loop()
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@BlackJack: Ich habe in Zeile 6 lediglich das letzte String-Literal korrekt beendet, sprich ein einzelnes ' hinter dem "'changed" hinzugefügt. Das sah ich sofort durch das Syntax-Highlighting; alles andere hab ich mir nicht weiter angeguckt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Angefangen mit IDLE 3 wenn ich eingebe import pyinotify kommt No module named pyinotify
oder wenn ich ein in einem blank file schriebe die datei endung auf .py mache und in den einstellungen make the file executable. und dann f5 oder im reiter run auf run module klicke kommt der fehler.
oder wenn ich ein in einem blank file schriebe die datei endung auf .py mache und in den einstellungen make the file executable. und dann f5 oder im reiter run auf run module klicke kommt der fehler.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Dann hast Du das Modul offenbar nicht oder nicht korrekt installiert
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Willhelm: Wenn Du ein Modul für Python 2 installierst, dann steht das natürlich nicht in Python 3 zur Verfügung. Wenn Du es mit Python 2 mit ``python -m pyinotify`` ausführst, dann geht es.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ich nehme mal an, dass das das "Standard" pip ist. Dann benutzt das das `python` Executable, was zur Zeit "normalerweise" fuer Python 2 steht.
sollte es dir fuer Python 3 installieren.
Code: Alles auswählen
python3 -m pip install pyinotify
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@Willhelm: Na dann ist `pip` nicht für Python 3 installiert sondern nur für Python 2.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Auf Linux-Systemen, bei denen Python2 Standard ist, wird ein ``pip`` für Python3 dann unter dem Namen ``pip3`` abgelegt (also der Aufrufname im Pfad). Vermutlich musst Du erst über die Paketverwaltung Deiner Distribution das entsprechende Paket (iirc auch oftmals ``pip3``) installieren *und* dann entsprechend aufrufen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
ok vielen Dank ich habe noch einbischen rum probiert aber es hat nicht funktioniert. desshalb habe ich es sein lassen.
Ich bin ausgewichen auf wenn ein file ausgelesen wird mach das.
So sieht es aus und es funktioniert
Jetzt möchte ich aber wieder in das file zurück schreiben und habe viel gegoogelt aber nichts hat funktioniert.
da die typen andere befehle nutzen.
freue mich auf eine Antwort
Ich bin ausgewichen auf wenn ein file ausgelesen wird mach das.
So sieht es aus und es funktioniert
Code: Alles auswählen
import pifacedigitalio as p
import time
p.init()
a = 50
while a > 5:
a = 6
f = open('/home/pi/Befehl.txt', 'a')
text = f.read(4)
f.close()
if text == 'Ein1':
print ('Ein1')
p.digital_write(0,1)
if text == 'Aus1':
print ('Aus1')
p.digital_write(0,0)
if text == 'Ein2':
print ('Ein2')
p.digital_write(1,1)
if text == 'Aus2':
print ('Aus2')
p.digital_write(1,0)
if text == 'Ein3':
print ('Ein3')
p.digital_write(0,1)
p.digital_write(1,1)
if text == 'Aus3':
print ('Aus3')
p.digital_write(0,0)
p.digital_write(1,0)
time.sleep(1)
da die typen andere befehle nutzen.
freue mich auf eine Antwort
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Naja, nutze einfach die Methoden zum Schreiben auf einem File-Objekt, etwa ``fobj.write`` :K
Dateien solltest Du immer so öffnen:
Diese ganzen ``if``-Blöcke kann man durch ein Dictionary ersetzen:
ungetestet!
Dateien solltest Du immer so öffnen:
Code: Alles auswählen
with open(...) as file_handle:
# in diesem Block ist file_handle Dein geöffnetes File-Objekt
# es wird *automatisch* und *auch im Fehlerfall* geschlossen
Code: Alles auswählen
dispatching = {
"Ein1": ((0, 1), ),
"Aus1": ((0, 0), ),
...
"Ein3": ((0, 1), (1,1)),
...
}
for text, data in dispatching.items():
print(text)
for pair in data:
p.digital_write(*pair)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Du kopierst noch sehr viel Code, "p" ist für ein Modulname doch sehr nichtssagend, dieses komische "a" mit seinen magischen Werten ist sehr magisch. Einrücktiefe ist immer vier Leerzeichen! Auf Modulebene sollte außer Definitionen nichts stehen.
Ich komm auf ungefähr das hier:
Ich komm auf ungefähr das hier:
Code: Alles auswählen
import pifacedigitalio as digitalio
import time
def main():
digitalio.init()
while True:
with open('/home/pi/Befehl.txt', 'a') as f:
text = f.read(4)
f.write('Okay')
print(text)
ein = text.startswith('Ein')
bits = int(text[3:])
for port in (0,1):
if bits&(1<<port):
digitalio.digital_write(port, ein)
time.sleep(1)
if __name__ == '__main__':
main()
Ok tut mir leid ich habe noch die falsch libary importiert
Code: Alles auswählen
import pifacedigitalio
import time
pfd = pifacedigitalio.PiFaceDigital()
a = 50
while a > 5:
a = 6
f = open('/home/pi/Befehl.txt', 'r')
text = f.read(4)
f.close()
if text == 'Ein1':
print ('Ein1')
pfd.relays[0].value = 1
if text == 'Aus1':
print ('Aus1')
pfd.relays[0].value = 0
if text == 'Ein2':
print ('Ein2')
pfd.relays[1].value = 1
if text == 'Aus2':
print ('Aus2')
pfd.relays[1].value = 1
if text == 'Ein3':
print ('Ein3')
pfd.relays[0].value = 1
pfd.relays[1].value = 1
if text == 'Aus3':
print ('Aus3')
pfd.relays[0].value = 0
pfd.relays[1].value = 0
time.sleep(1)