2017-02-21 36 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)