【问题标题】:Python3 restart a script from another scriptPython3 从另一个脚本重新启动一个脚本
【发布时间】:2017-05-09 13:22:55
【问题描述】:

情况是这样的:

我有 2 个 Python 脚本在 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。或者关闭他的外壳并打开一个新的。

编辑:

我也试过了:

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:

【问题讨论】:

  • 我没有使用过子流程,但在快速查看文档后Popen 看起来很有希望。
  • 您是否将 shebang 添加到您的脚本 roomcontrol.py 中? (#!/usr/bin/env python)
  • @Olian04 我试过了(我编辑了帖子)
  • @slallum 是的,我做到了

标签: python subprocess call


【解决方案1】:

创建一个新的 .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 启动进程,但您可以使用以下 (bash) 命令在另一个终端窗口中启动“roomcontrol.py”:

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'

【讨论】:

  • 嗨,Alek,谢谢您的回答!它可以工作,但我需要在我们杀死的那个 shell 中运行脚本。我不知道我是否解释过自己:我想关闭 roomcontrol.py(也许我们也可以关闭 shell)并在同一个 shell 中打开一个新的 roomcontrol.py(或者如果我们关闭旧的,则在一个新的 shell 中) . server.py 的外壳不一样...
  • 我编辑了我的答案,但我不确定这是否是你需要的,但希望它有所帮助
  • 嗨,“来自不同的外壳”我的意思是“来自不同的终端窗口”,我的错! :) 感谢它接缝工作的答案!
  • 另一件事:如果我需要启动 restart.sh 但它在另一个目录中?示例:server.py 位于“主”目录中。 restart.sh(和 roomcontrol.py)在 main/child/ 中。你能帮助我吗?谢谢
  • 好的没问题,我自己解决了。再次感谢您!
猜你喜欢
  • 2022-08-22
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
相关资源
最近更新 更多