2011-12-16 2 views
1

Возможно ли, чтобы один сценарий вызывал другого, а затем вышел (не знаю, правильно ли я это делаю), оставив другой скрипт? В частности, я хочу, чтобы скрипт обновления загружал installer.py, а затем запускал его. Так как installer.py перезаписывает скрипт обновления, я не могу просто сделать subprocess.call(), так как он завершится неудачно на этапе «удалить старую установку».Как переключить исполнение на новый скрипт в Python?

Возможно ли это, или я должен оставить сценарий обновления самостоятельно, заменить все остальное, поместить новый во временный каталог и затем заменить его при следующей запуске программы? Считается ли это лучшим подходом?

Спасибо вам большое и извините, если это ослепительно очевидно.

+0

Обратите внимание, что когда-то модуль Python был импортирован, вам больше не нужен исходный файл. Таким образом, сценарий обновления может запускать установщик как подпроцесс, и до тех пор, пока сценарий обновления не нуждается в перезагрузке старой версии, должен будь умницей. –

ответ

3

Один из функций os.exec* family должен делать то, что вы хотите.

+0

Спасибо большое - это похоже на штуку. Я попробую. – 2e0byo

0

Поскольку вы загружаете другой скрипт Python, вы можете попробовать использовать exec для его запуска. В 2.x есть вспомогательная функция execfile для такого рода вещей (которая обертывает использование ключевого слова exec; в 3.x вы должны прочитать файл и передать полученную строку в exec (теперь это функция, если я «м чтении правильно).

вы всегда должны быть 110% уверены, что вы доверяете содержание в таких случаях! кажется, что это не является проблемой для вас, хотя.

+0

Исполнение Python похоже на eval на других языках, а вовсе не на libc exec. В частности, он не заменяет текущую программу. – Tobu

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