2015-07-25 3 views
1

Я создал программу, и я хочу добавить систему обновления. Он проверяет, есть ли какие-либо обновления с веб-сайта, и если есть обновление, он загружает новый файл и перезаписывает новый файл сам по себе.Как удалить запущенный скрипт 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 
+0

Во-первых, конечно, вы должны быть назвать новую программу как sys.argv [0] –

+0

Я уверен в этом. –

+1

Вот процесс, который вы обычно выполняете, чтобы иметь программу, которая обновляет себя: Получить вспомогательную программу (может быть включена в качестве ресурса в вашей основной программе). Запустите вспомогательную программу как отдельный процесс. Вспомогательная программа загружает обновление в вашу программу. Попросите основную программу обнаружить, что обновление готово, а затем закройте (или предложите пользователю закрыть его, потому что обновление готово). Определите помощник, когда оригинал был закрыт, и замените оригинал на обновление. Запустите обновленную версию из помощника, затем закройте помощника. Обновленная версия теперь может удалить помощника. – ArtOfWarfare

ответ

-1

Попробуйте запустить его с администратора завивке. Проблема может заключаться в том, что вы превращаете ее в .exe. Не могли бы вы рассказать об этом. Не могли бы вы также отправить вам код, только соответствующий бит.

+0

Не работает. Я объяснил свое объяснение. Я добавил коды. –

0

Возможно, это повезло, я не смогу проверить его на окнах прямо сейчас.

Разблокирования обработчика файлов из процесса являются своим родом «неприятного процесса», (article here) НО , как обработчик файлов уже был открыт, так что, возможно, только возможно, открытия снова в питон может слиться с тем же обработчиком системы. Пробовал это на linux, работает.

Так что попробуйте просто overwritting это

with open('program.exe', 'wb') as f: # or 'w' for *.py extension 
    f.write(your downloaded data) 
+0

У меня есть эта ошибка: IOError: [Errno 13] Разрешение отклонено –

Смежные вопросы