matze31
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Hallo, ich möchte mit Hilfe einen sh- script ein Python Programm starten und in einer Schleife aller 10 Sekunden neustarten.
Nun bekomme ich immer die Fehlermeldung:
Syntax error: end of file unexpected (expecting "do")
Hier meine bash: !/bin/bash
while [ true ]; do
python /home/matze/temp.py
sleep 10
done Was mache ich verkehrt?
|
mrkramps
Anmeldungsdatum: 10. Oktober 2006
Beiträge: 5523
Wohnort: south central EL
|
matze31 schrieb: Was mache ich verkehrt?
Alles … 😉 #!/bin/bash
while true ; do
python /home/matze/temp.py
sleep 10
done
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Da kommt leider die gleiche Fehlermeldung. Das script starte ich so: sudo sh /home/matze/start.sh
|
mrkramps
Anmeldungsdatum: 10. Oktober 2006
Beiträge: 5523
Wohnort: south central EL
|
Hast du den Inhalt des Skripts irgendwo kopiert oder auf einem anderen Betriebssystem geschrieben? Vielleicht ist mir gerade einfach nur zu warm, aber mir scheint, dass der Zeilenumbruch am Zeilenenden bei dir nicht passt?!
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Ich hatte es erst auf dem raspberry pi, nachdem da die Fehlermeldung kam, hab ich es auf meinen Xubuntu rechner kopiert.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13174
|
Bitte poste doch mal die Ausgabe von od -t x1c /home/matze/start.sh hier im Codeblock.
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
jetzt funktioniert es in Xubuntu, nur am Pi nicht.
🙄
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13174
|
matze31 schrieb: jetzt funktioniert es in Xubuntu, nur am Pi nicht.
🙄
Du musst schon die Fehlermeldung posten. Richtig fragen
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Ich hab den Fehler gefunden,ich hab per Total Commander einfach die am Laptop erstellte .sh Datei rüber kopiert.
Das war der Fehler. Dann mit 'sudo nano' eine Datei mit .sh erstellt und siehe da, es läuft.
Danke für die Vielen Hinweise.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo, Anmerkung: um etwas periodisch zu starten ist so ein Shellskript aber stark suboptimal. Entweder nimmst du einen systemd Timer Unit oder (old-school 😉 ) einen Cron-Job. Oder du packst die Endschloss-Schleife und das sleep 10 ins Python-Skript, dann musst du es auch nur 1x starten und sparst dirdas Bash-Skript. Gruß, noisefloor
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Jetzt habe ich es mit einer while Schleife gemacht, und es funktioniert fast so wie es sein soll.
Nur bei einen Punkt hakt es noch, vielleicht könnte mir mal einer auf dem Weg helfen, hab nach langen suchen den Fehler nicht gefunden. Hier mal mein komplettes script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | #!/usr/bin/python
# -*- coding: utf-8 -*-
from datetime import datetime
import time
t= datetime.now().strftime('%H:%M:%S %d-%m-%Y')
while 1:
file = open('/sys/devices/w1_bus_master1/w1_master_slaves')
w1_slaves = file.readlines()
file.close()
for line in w1_slaves:
w1_slave = line.split("\n")[0]
file = open('/sys/bus/w1/devices/' + str(w1_slave) + '/w1_slave')
filecontent = file.read()
file.close()
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
write = ('%6.2f C' % temperature)
for file in ['/var/www/html/temperatur.html', '/home/pi/grad.txt']:
a = open(file, 'w')
a.write (write)
time.sleep (1)
|
Es soll praktisch die Temperatur in einer for Schleifen in beiden Verzeichnisse bzw Dateien geschrieben werden. Aber es schreibt immer nur in das erste ('/var/www/html/temperatur.html'). Wenn ich es anders herum schreibe, schreibt es in das andere, aber nicht mehr in die html.
Woran könnte es liegen? Bearbeitet von rklm: Syntaxhighlighting
|
Planspiel
Anmeldungsdatum: 2. Mai 2016
Beiträge: 673
Wohnort: Spielplan
|
matze31 schrieb: for file in ['/var/www/html/temperatur.html', '/home/pi/grad.txt']:
a = open(file, 'w')
a.write (write)
time.sleep (1)
Es soll praktisch die Temperatur in einer for Schleifen in beiden Verzeichnisse bzw Dateien geschrieben werden. Aber es schreibt immer nur in das erste ('/var/www/html/temperatur.html'). Wenn ich es anders herum schreibe, schreibt es in das andere, aber nicht mehr in die html.
Woran könnte es liegen?
Fehlt da nicht ein ?
|
matze31
(Themenstarter)
Anmeldungsdatum: 25. Oktober 2015
Beiträge: 788
|
Das war es, das hab ich vergessen/übersehen.
Jetzt funktioniert es. Danke
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo, eleganter ist, wenn du den with Contextmanager benutzt. Dann wird die Datei auch automatisch geschlossen: | with open('/var/www/html/temperatur.html', w) as html, open('/home/pi/grad.txt', w) as txt:
html.write(write)
txt.write(write)
|
Gruß, noisefloor
|