2017-05-09 175 views
0

情況是這樣的:Python3重新啓動腳本從另一個腳本

我有2腳本在Python兩種不同的炮彈在Linux上運行: 1° - python3 server.py 2° - python3 roomcontrol.py

我需要用戶可以從server.py重新啓動roomcontrol.py。 我試着用子:

from subprocess import call 

dir = os.path.dirname(os.path.realpath(__file__)) + "/roomcontrol.py" 
call(["python3",dir]) 

這些指令只在「server.py」殼開始「roomcontrol.py」的新istance,我需要在自己的殼重新啓動roomcontrol.py。或關閉他的外殼並打開一個新的。

編輯:

我也試過:

import subprocess 

dir = os.path.dirname(os.path.realpath(__file__)) + "/roomcontrol.py" 
subprocess.Popen([dir], stdout=subprocess.PIPE, shell=True) 

它不工作。 它寫了很多東西在server.py的同一個shell中,我的光標變成了一個十字,如果我點擊某個地方,它就像以前一樣。什麼寫入一個小例子:

import: unable to grab mouse `': Resource temporarily unavailable @ error/xwindow.c/XSelectWindow/9199. 
import: unable to grab mouse `': Resource temporarily unavailable @ error/xwindow.c/XSelectWindow/9199. 
. 
. 
. 
from: can't read /var/mail/xml.dom 
/home/stark/Desktop/TrackingOk/Release/roomcontrol.py: 9: /home/stark/Desktop/Tr: not foundlease/roomcontrol.py: 
/home/stark/Desktop/TrackingOk/Release/roomcontrol.py: 10: /home/stark/Desktop/T: not foundelease/roomcontrol.py: try: 
+0

我還沒有使用子流程,但在文檔[Popen](https://docs.python.org/3.6/library/subprocess.html#subprocess.Popen)中快速瀏覽看起來很有前途。 – Olian04

+0

您是否將shebang添加到腳本roomcontrol.py中? ('#!/ usr/bin/env python') – slallum

+0

@ Olian04我試過了(我編輯過這個帖子) –

回答

0

創建一個新的sh文件( 「restart.sh」 爲例):

#!/bin/bash 
kill $(pgrep -f 'python3 roomcontrol.py') 
python3 roomcontrol.py & 

然後就叫

os.system('./restart.sh') 

在某處你的「server.py」腳本。

PS:您可以通過運行以下命令使sh文件可執行:

chmod +x restart.sh 

編輯:我不知道如何從不同的shell啓動的過程,但你可以在另一個終端窗口中啓動「roomcontrol.py」具有以下(bash)的命令:

gnome-terminal -x sh -c 'python3 roomcontrol.py' 

但你不得不通過

取代「restart.sh」
+0

嗨,阿列克,謝謝你的回答! 它的工作原理,但我需要在我們遇害的同一個shell中運行腳本。 我不知道我是否自我解釋: 我想關閉roomcontrol.py(也許我們也可以關閉這個shell),並在同一個shell中打開一個新的roomcontrol.py(或者如果我們關閉了舊的)。 不是一樣的server.py的shell ... –

+0

我編輯了我的答案,但我不確定這是否是你需要的,希望它有幫助,雖然 – Alek

+0

嗨,「來自不同的shell」我的意思是「來自不同的終端窗口「,我的壞! :) 感謝您的接縫工作! –