python запустить функцию после выполнения всех других функций - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение Kivy для экрана входа в систему. после того, как пользователь вошел в систему, я хочу вызвать скрипт. У меня проблемы с тем, чтобы заставить мой сценарий делать то, что я хочу. Я хочу, чтобы моя функция os_call запускалась после завершения работы sign_in. эти 2 функции находятся в классе, и этот класс вызывается из main.py. 2 функция os_call вызывается до завершения функции 1 (для входа в систему).

Как мне заставить мой os_call работать после пользователя вошел в систему?

Основной скрипт

import sys
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, NoTransition
from kivy.uix.label import Label
from kivy.uix.button import ButtonBehavior
from myfirebase import MyFirebase
import runpy



class LabelButton(ButtonBehavior, Label):
    pass

class HomeScreen(Screen):
    pass

class LoginScreen(Screen):
    pass

GUI = Builder.load_file("main.kv")

class MainApp(App):
    def build(self):
        self.my_firebase = MyFirebase()
        return GUI

    def on_start(self):

        try:
            with open("refresh_token.txt", "r") as f:
                refresh_token = f.read()

            #use refresh token to get a new idtoken
            id_token, local_id = self.my_firebase.exchange_refresh_token(refresh_token)
            self.local_id = local_id
            self.id_token = id_token
            self.root.ids['screen_manager'].transition = NoTransition()
            self.change_screen("home_screen")

            os.system('python moveUpdate.py')
            print('from main')



        except Exception as e:
            print(e)
            pass

    def change_screen(self, screen_name):
        # get the screen manager from the kv file
        screen_manager = self.root.ids['screen_manager']
        screen_manager.transition
        screen_manager.current = screen_name


MainApp().run()

Мой логин

import requests
import json
from kivy.app import App
import os
import runpy





class MyFirebase():
    wak = ''

    def sign_in(self, email, password):
        signin_url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=" + self.wak
        signin_payload = {"email": email, "password": password, "returnSecureToken": True}
        signin_request = requests.post(signin_url, data=signin_payload)
        sign_up_data = json.loads(signin_request.content.decode())
        app = App.get_running_app()

        print(signin_request.ok)
        print(signin_request.content.decode())



        if signin_request.ok == True:
            app.change_screen("home_screen")
            refresh_token = sign_up_data["refreshToken"]
            localId = sign_up_data["localId"]
            idToken = sign_up_data["idToken"]
            # Save refreshToken to a file
            with open("refresh_token.txt", "w") as f:
                f.write(refresh_token)

            # Save localId to a variable in main app class
            # save idToken to a variable in main app class
            app.local_id = localId
            app.id_token = idToken
            print('loged in')

            os.system('python moveDmn.py')
            os.system('python startUp.py')
            print('from login')


        else:
            print('Error email or password fail,')
            print('Pleas try again')

    def os_call(self):
        print('run script')
        os.systeem(r'.\run.exe')
        #This need to be called after sign_in

    def exchange_refresh_token(self, refresh_token):
        refresh_url = "https://securetoken.googleapis.com/v1/token?key=" + self.wak
        refresh_payload = '{"grant_type": "refresh_token", "refresh_token": "%s"}' % refresh_token
        refresh_req = requests.post(refresh_url, data=refresh_payload)
        print("Refresh ok ?", refresh_req.ok)
        print(refresh_req.json())
        id_token = refresh_req.json()['id_token']
        local_id = refresh_req.json()['user_id']

        os.system('python update.py')
        print('from refresh')


        return id_token, local_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...