ubuntuusers.de

bash script soll python script starten

Status: Gelöst | Ubuntu-Version: Xubuntu 16.04 (Xenial Xerus)
Antworten |

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 Team-Icon

Avatar von 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 Team-Icon

Avatar von 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 Team-Icon

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 Team-Icon

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 Team-Icon

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

1
a.close()

?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 788

Das war es, das hab ich vergessen/übersehen. Jetzt funktioniert es.

Danke

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

eleganter ist, wenn du den with Contextmanager benutzt. Dann wird die Datei auch automatisch geschlossen:

1
2
3
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

Antworten |