【问题标题】:Check a Python Script Is Running检查 Python 脚本是否正在运行
【发布时间】:2019-03-10 10:02:15
【问题描述】:

我有一个名为 update.py 的 python 脚本,我想使用另一个 python 脚本来检查该脚本是否正在运行。如果 update.py 没有运行或出错,则脚本将运行 update.py。

我可以吗?如果有例子将非常感谢。

【问题讨论】:

  • 嗨,米尔扎,欢迎来到 SO!我是 Vivek 最简单答案的粉丝。我过去使用过该解决方案,但没有发现问题。如果这符合您的目的,请不要再犹豫了。如果您需要为管理员提供更标准的流程控制,请考虑 systemd。如果我知道如何更好地使用它,我会提供答案。 systemd 是一种标准服务,用于停止和启动其他进程(并监视它们,如果需要和配置,则重新启动它们)。看看您是否可以了解有关 systemd 的更多信息 - 如果您想变得更正式。
  • 对于一个最小的嵌入式系统(如果不是在已经提供 systemd 的发行版上),runit 更容易配置——runit 服务实际上比 Vivek 的答案更容易;请参阅smarden.org/runit/runscripts.html 处的示例运行脚本
  • 这能回答你的问题吗? Check to see if python script is running

标签: python bash raspberry-pi3


【解决方案1】:

不确定你在问什么,但鉴于这可能会有所帮助,所以如果你只想从另一个调用一个 python 脚本,那么你可以使用脚本 1

 #!/usr/bin/python 
 from subprocess import call
 call(["python", "update.py"])

将此文件保存在名为 script1 的脚本中并运行它,它将编译 update.py。 如果您想检查 update.py 中的任何语法错误,那么您可以使用脚本 2

#!/usr/bin/python
from subprocess import call
call(["python","-m","py_compile", "update.py"])

如果 script2 编译没有任何错误,则表明您的程序中没有语法错误。

第三,如果你想检查 update.py 当前是否正在运行,你可以使用脚本 3

#!/usr/bin/python
import psutil
import sys
from subprocess import Popen

for process in psutil.process_iter():
    if process.cmdline() == ['python', 'update.py']:
         sys.exit('Process found: exiting.')

print('Process not found: starting it.')
Popen(['python', 'update.py'])

最后一个脚本会告诉你的脚本是否正在运行,如果它没有运行,它将编译它。

【讨论】:

    【解决方案2】:

    脚本通常用于此类任务。您有一个监控脚本来跟踪在后台运行的 update.py。如果监控脚本一开始就启动 python 脚本,那就更容易了。

    #!/bin/bash
    # Monitor script. 
    
    EXEC=<path>/update.py
    
    while true; do
        "$EXEC" &
        wait # Here the assumption is that you want to run this forever. 
    done
    

    【讨论】:

    • 你为什么要这样做,而不是while true; update.py; done?启动后台进程并等待它没有任何价值,而只是启动前台进程(父 shell 隐式等待)。
    • 在最简单的情况下,根本不需要它。我在想我会做什么,我有多个进程来监控或update 的多个实例来处理。
    • 即使有多个进程:(while true; do process1; done) &amp; (while true; do process2; done)。当您在多进程情况下仅依赖 wait 时,您需要单独跟踪 PID - 它变得更加复杂,并且有点容易出错(由于 PID 重用极端情况等) .
    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多