У меня есть приложение 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