Я создал программу, и я хочу добавить систему обновления. Он проверяет, есть ли какие-либо обновления с веб-сайта, и если есть обновление, он загружает новый файл и перезаписывает новый файл сам по себе.Как удалить запущенный скрипт Python
.py файл работает. Он удаляет себя через метод os.unlink и сохраняет новый файл вместо старого файла. Затем он открывает новую версию и закрывается. Но, когда я запускаю его EXE-файл (pyinstaller), я получил эту ошибку:
WindowsError: [Error 32] The process cannot access the file because it is being used by another process
Как я могу решить эту проблему?
Edit: я включил его в исполняемый файл через pyinstaller и набрав эту команду:
pyinstaller file.py
коды из моего сценария:
os.unlink(sys.argv[0]) # The program is deleting itself.
if sys.argv[0].endswith(".py"): #detects that is itself an exe or a python file
urlretrieve("http://version.information.site.com/newprogram.py", "newprogram.py") #download file as newprogram.py
os.rename("newprogram.py", "program.py") #rename new file as program.py
os.system("python program.py") #run new program
elif sys.argv[0].endswith(".exe"): #if it is a exe file
urlretrieve("http://version.information.site.com/newprogram.exe", "newprogram.exe") #download file as newprogram.exe
os.rename("newprogram.exe", "program.exe") #rename new file as program.exe
os.system("program.exe") #run new program
Во-первых, конечно, вы должны быть назвать новую программу как sys.argv [0] –
Я уверен в этом. –
Вот процесс, который вы обычно выполняете, чтобы иметь программу, которая обновляет себя: Получить вспомогательную программу (может быть включена в качестве ресурса в вашей основной программе). Запустите вспомогательную программу как отдельный процесс. Вспомогательная программа загружает обновление в вашу программу. Попросите основную программу обнаружить, что обновление готово, а затем закройте (или предложите пользователю закрыть его, потому что обновление готово). Определите помощник, когда оригинал был закрыт, и замените оригинал на обновление. Запустите обновленную версию из помощника, затем закройте помощника. Обновленная версия теперь может удалить помощника. – ArtOfWarfare