检查特定的Python脚本是否已经在运行

3

如何从Python脚本中检查另一个特定的Python脚本是否正在运行?

def running():
    for q in psutil.process_iter():
        print q
        if q.name() == 'server_class.py':
            return True
    return False

我尝试过了,但程序被称为“python”,而不是脚本的名称。

你控制另一个脚本吗?如果是这样,你可以使用某种形式的进程间通信来询问它是否正在运行。 - handle
*Nix:https://unix.stackexchange.com/questions/110698/how-to-check-which-specific-processes-python-scripts-are-running - handle
2个回答

2

Python脚本文件将成为命令行的一部分。您可以尝试以下内容:

def running():

    for q in psutil.process_iter():
        if q.name() == 'python':
            print q.cmdline()
            if len(q.cmdline())>1 and 'server_class.py' in q.cmdline()[1]:
                return True

    return False

我只是举例使用了 in。你可能想要匹配完整路径。


我必须插入 'prozesslinie = q.cmdline()',并测试其长度,否则会出现错误 'TypeError: object of type 'method' has no len()'。 - heimi
我已经调整了这个例子。 - Juan Leni
Django 应用程序无法正常工作。很奇怪:只有我的计划任务 CRONS 显示在列表中。在另一个 Chrome 标签页中,我运行了一个长函数的 views.py,但它没有显示出来。 - Abpostman1

-1
案例:当您想要退出脚本时,如果先前已经有一个实例在运行:

def already_running(script_name):
num_instance = 0
for q in psutil.process_iter():
    if 'python' in q.name():
        if len(q.cmdline()) > 1 and script_name in q.cmdline()[1]:
            num_instance += 1
return num_instance > 1

功能:

  1. 它检查当前运行的 script_name 实例数量。如果您从文件 xyz.py 调用此函数并将 xyz.py 作为参数发送,请记住当前实例也会被计算在内。

  2. 如果 num_instance > 1,则表示有先前的实例正在运行。

希望这对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接