Skript neustarten

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
Glare
User
Beiträge: 7
Registriert: Samstag 11. Januar 2020, 11:57

Hallo,

ich möchte per requests Daten abrufen. Manchmal kommt aber leider HTTP Error 401, auch wenn die Auth. passt.

Daher wollte ich nun den HTTP Status Code abrufen, wenn dieser 200 ist, die Daten verarbeiten und bei allen anderen Codes das Skript neu starten.

Doch wie bekomme ich es hin das wieder an den Anfang gesprungen wird? Oder wie bekomme ich es anders gelöst?

Code: Alles auswählen

import requests
import json
import time

def daten_holen():
    with open('token.txt') as file:
        json_data=json.load(file)
        token = json_data['token']

    URL = "http://..."
    headers = {"Authorization": "Bearer "+token}

    global changes
    changes = requests.get(url=URL, headers=headers)
    return changes

s = 0
while s == 0:
    daten_holen()

    status = changes.status_code
    print (status)
    if status != 200:
        print(" HTTP Status ist " + str(status) + ". FEHLER!!!")
        time.sleep(5000)
        [b]###NEUSTARTEN[/b]
    else:
        [b]###Daten verarbeiten[/b]
        

   time.sleep(600)
Gruß Sascha
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast doch eine schleife, die das nächste Request triggert. Wozu soll ein Neustart gut sein? Die Servergötter befrieden? Die kriegen davon nix mit.
Glare
User
Beiträge: 7
Registriert: Samstag 11. Januar 2020, 11:57

Stimmt, eigentlich macht es ja schon das was es soll. Habe wohl zu kompliziert gedacht :-D

Danke ;-)
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Glare: Auf Modulebene sollte sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Das ``global`` hat da nix zu suchen. Vergiss am besten gleich wieder dass es dieses Schlüsselwort gibt.

`s` wird nicht wirklich verwendet. Ist auch kein guter Name. Weg damit.

Beim öffnen von Textdateien sollte man immer explizit die Kodierung angeben. JSON-Dateien würde ich aber auch gar nicht als Textdatei öffnen, sondern im Binärmodus und das mit der Kodierung dem JSON-Modul überlassen.

Man muss auch nicht jedes kleine Zwischenergebnis an einen Namen binden.

Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.

Das Problem was Du beschreibst gibt es doch gar nicht wirklich. Da ist doch eine Schleife drum herum, also das tut doch bereits das was Du willst‽ Vielleicht möchtest Du ja einfach nur das `sleep()` erstens syntaktisch korrekt einrücken und zweitens nicht am Ende der Schleife unbedingt ausführen.

Code: Alles auswählen

#!/usr/bin/env python3
import json
import time

import requests


def daten_holen():
    with open("token.txt", "rb") as file:
        token = json.load(file)["token"]

    return requests.get(
        "http://...", headers={"Authorization": "Bearer " + token}
    )


def main():
    while True:
        changes = daten_holen()
        if changes.status_code != 200:
            print(f"HTTP Status ist {changes.status_code}. FEHLER!!!")
            time.sleep(5000)
        else:
            ...
            time.sleep(600)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten