Перезапуск скрипта 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,

Другие вопросы по тегам