Python3 从另一个脚本重新启动一个脚本

Python3 restart a script from another script

情况是这样的:

我在 python 运行 中有 2 个脚本,在 Linux 中有 2 个不同的 shell: 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"的shell中开始一个新的"roomcontrol.py"的实例,我需要在他的shell中重新启动roomcontrol.py。或者关闭他的 shell 并打开一个新的

编辑:

我也试过:

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:

创建一个新的 .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" window 使用以下 (bash) 命令:

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

但是你必须将 "restart.sh" 替换为

#!/bin/bash
kill -9 $(pgrep -f 'sh -c python3 roomcontrol.py')
gnome-terminal -x sh -c 'python3 roomcontrol.py'