Перезапуск скрипта Python внутри скрипта с той же версией Python
Я запускаю программу на сервере на сервере, и в моей учетной записи на сервере у меня установлена версия Python в файле.bashrc следующим образом:
alias python="python2.7"
У меня есть сценарий Python, который я хотел бы иметь возможность перезагрузить себя. Локально работает, но когда я перезагружаю его на сервере, он работает один раз, а затем переключается на другую версию python. У меня есть следующая функция:
def restartScript(self):
print("Restarting server")
print(sys.executable,['python']+sys.argv)
os.execv(sys.executable,['python']+sys.argv)
При первой попытке перезагрузить его выводит следующее:
/usr/local/bin/python2.7 ['python', 'server.py']
Однако во второй раз, когда я запускаю сервер, он печатает следующее:
/usr/local/bin/python ['python', 'server.py']
Это также дает ошибку, потому что я использую модуль, который установлен для /usr/local/bin/python2.7, но не установлен для / usr / local / bin / python.
Есть ли простой способ убедиться, что сервер всегда перезагружается с /usr/local/bin/python2.7? Я хотел бы сделать его гибким, чтобы кто-то мог использовать этот перезапуск, независимо от того, определили ли они версию Python по умолчанию в.bashrc или используют виртуальную среду. Также хотелось бы, чтобы это работало, если они используют Python 3 или Python 2.
2 ответа
Следующее работает независимо от того, какую версию Python вы используете:
os.execv(sys.executable,[sys.executable.split("/")[-1]]+sys.argv)
Я чувствую, что могу что-то неправильно понять, но я думаю, что вы просто хотите пройти 'python2.7'
в качестве первого элемента вашего списка аргументов вместо 'python'
, Или, если вы не уверены, каким будет имя исполняемого файла, передайте sys.executable
,