2017-02-21 31 views
0

我的服务器上运行的Python程序,并在我的账号在服务器上我已经在Python版本中的.bashrc文件设置如下脚本中:重启Python脚本具有相同的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,它也会喜欢它。

+0

的可能的复制[在Linux两种版本的Python。如何使2.7默认](http://stackoverflow.com/questions/19256127/two-versions-of-python-on-linux-how-to-make-2-7-the-default) – Elodin

+0

我想使其更灵活,以便有人可以使用此重新启动,无论他们是否已经在.bashrc中定义了它们的默认版本的python(如上所述)或正在使用虚拟环境。 – user1763510

回答

0

我觉得我可能会误解某些东西,但我想你只是想通过'python2.7'作为参数列表的第一个元素而不是'python'。或者如果您不确定可执行文件名是什么,请通过sys.executable

+0

我想使它更具灵活性,以便在用户使用其他版本的python时也能正常工作。如果我将os.execv(sys.executable,['python'] + sys.argv)更改为os.execv(sys.executable,[sys.executable] + sys.argv),我仍然会得到上述相同的行为。 – user1763510

+0

奇数。我只是在本地尝试,并更改为使用sys.executable作为列表的第一个元素工作。如果你从未在execv中提到python可执行文件,很难看到它甚至会找到你的/ usr/loca/bin/python。 – happydave

+2

它对我来说也适用于本地。我相信这与os.execv在不使用.bashrc文件的shell中执行的事实有关。 – user1763510

0

独立您正在使用的Python版本的以下工作:

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