Старт файла после его перезаписи Python

Рейтинг: 0Ответов: 1Опубликовано: 25.06.2023

Я создал программу которая обновляет файл, то-есть перезаписывает его и открывает но при запуске выполняется старая версия файла, при том если сделаю time.sleep на 10 сек перед выполнением файла, если посмотреть на него то все изменения уже есть, но выполняется старая версия. Что делать ? Код который изменяет файл

import requests
from bs4 import BeautifulSoup as BS
from test import version
import time


r = requests.get('секрет')
html = BS(r.content, 'html.parser')


for ver in html.select(".items > .version"):
  open("vers.txt", 'w').write(ver.text)
  if float(ver.text) != version:
    open('vers.txt', 'w').write(ver.text)
    for el in html.select(".items > .cod"):
      for trueor in html.select('.items > .yesorno'):
        if trueor.text == "no":
          for dop in html.select('.items > .dop'):
            a = open("test.py", 'r')
            b = a.read().replace(str(version), str(ver.text))
            b = b.replace("###", dop.text)
            print('no')
            with open('test.py', 'w') as f:
              f.write(b)
        if trueor.text == "yes":
          print('yes')
          with open('test.py', 'w') as f:
            f.write("version = " + ver.text + "\n\n" + el.text)
        if trueor.text != "no" and trueor.text != "yes":
          print("Ошибка обновления, напишите создателю.\nError: 'yes or no'")

time.sleep(1)
import test
test.gg()

Задачей было создать программу которая пере записывает файл а потом стартует его, то есть обновляет файл, берёт обновление с моего сайта.Тоесть я хотел делать программы которые мог обновлять через сайт, чтобы кому давал программы могли не каждый раз скачивать у меня новую версию, а могли просто открыть апдатер и обновить. Это всё. Я смог сделать только этот код.

Ответы

▲ 0Принят

Перезагрузить файл

from test import version
import test
import importlib

.....

importlib.reload(test)
version = test.version

Но в случае обновления программы я рекомендую перезапустить питона полностью.

import os,sys
print('Запуск')
if os.environ.get('NEEDUPDATE', 'YES') == 'YES':
    print('Код обновления')
    os.environ['NEEDUPDATE']='NO'
    os.execl(sys.executable, 'Имя проги в списке процессов' , *sys.argv)
print('Код программы')

Выведет

$ python3 execself.py 
Запуск
Код обновления
Запуск
Код программы