使用相同的python版本在脚本中重新启动python脚本

时间:2017-02-21 00:25:35

标签: 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']+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重新启动?我想让它变得灵活,以便有人可以使用这个重启,无论他们是在.bashrc中定义了他们的默认版本的python还是正在使用虚拟环境。如果他们使用的是python 3或python 2,也希望它能正常工作。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

以下工作独立于您使用的python版本:

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