在具有相同python版本的脚本中重新启动python脚本

在具有相同python版本的脚本中重新启动python脚本,python,bash,python-2.7,execv,Python,Bash,Python 2.7,Execv,我正在服务器上运行python程序,在服务器上的帐户上,我在.bashrc文件中设置了python版本,如下所示: alias python="python2.7" 我有一个python脚本,我希望能够重新启动自己。它在本地运行良好,但当我在服务器上重新启动它时,它只运行一次,然后切换到不同版本的python。我有以下功能: def restartScript(self): print("Restarting server") print(sys.executable,['python

我正在服务器上运行python程序,在服务器上的帐户上,我在.bashrc文件中设置了python版本,如下所示:

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 ['python', 'server.py']
/usr/local/bin/python ['python', 'server.py']
这也给出了一个错误,因为我使用的模块是为/usr/local/bin/python2.7安装的,但不是为/usr/local/bin/python安装的


有没有一种简单的方法可以确保服务器总是使用/usr/local/bin/python2.7重新启动?我想让它变得灵活,这样无论是在.bashrc中定义了python的默认版本还是在使用虚拟环境,都可以使用此重启。如果他们使用Python3或python2,我也希望它能起作用。

我觉得我可能误解了什么,但我认为您只想将
'python2.7'
作为参数列表的第一个元素,而不是
'python'
。或者,如果您不确定可执行文件名是什么,请传递
sys.executable

以下内容,这些内容与您使用的python版本无关:

os.execv(sys.executable,[sys.executable.split("/")[-1]]+sys.argv)

我想让它变得灵活,这样如果用户也在使用另一个版本的python,它就可以工作。如果我将os.execv(sys.executable,['python']+sys.argv)更改为os.execv(sys.executable,[sys.executable]+sys.argv),我仍然会得到上面描述的相同行为。我只是在本地进行了尝试,并改为使用sys.executable作为列表的第一个元素。如果你从来没有在execv中提到python可执行文件,那么很难看到它是如何找到你的/usr/loca/bin/python的。我认为这与os.execv在不使用.bashrc文件的shell中执行有关。最后一条评论可能是正确的。如果您在local.bashrc中设置了别名(python='python2.7'),那么别名(python='python2.7')只能在本地工作——当然,有多种方法可以解决这个问题。我的做法是只使用
os.execv(sys.executable,['python2.7']+sys.argv)
,因为在大多数情况下,这在本地和由另一个用户或服务器执行时都会起作用。我想让它变得灵活,以便有人可以使用此重新启动,无论他们是否在.bashrc中定义了python的默认版本(就像我上面提到的)或者正在使用虚拟环境。