繁体   English   中英

检查 python 脚本是否从另一个 python 脚本 linux 运行

[英]Check if python script running from another python script linux

我实际上有 python 脚本在后台运行,你可以看到当我使用命令“ps -aux”时它是如何显示的:

root       405  0.0  2.6  34052 25328 ?        S    09:52   0:04 python3 -u /opt/flask_server/downlink_server/downlink_manager.py

我想检查这个脚本是否从另一个 python 脚本运行,所以我尝试使用psutil 模块,但它只是检测到 python3 正在运行但不是我的脚本精确:有我的 python 脚本:

import os
import psutil
import time
import logging
import sys

for process in psutil.process_iter():
if process.cmdline() == ['python3', '/opt/flask_server/downlink_server/downlink_manager.py']:
    print('Process found: exiting.')

看起来很简单,但相信我,我已经尝试过其他 function 在另一个主题上提出的建议,如下所示:

def find_procs_by_name(name):
"Return a list of processes matching 'name'."
ls = []
for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]):
    if name == p.info['name'] or \
            p.info['exe'] and os.path.basename(p.info['exe']) == name or \
            p.info['cmdline'] and p.info['cmdline'][0] == name:
        ls.append(p)

return ls

ls = find_procs_by_name("downlink_manager.py")

但是这个 function 没有找到我的脚本,它的工作,当我搜索 python3 但不是脚本的名称时。

当然我试着把脚本的所有路径都放了,但什么也没有,你能帮帮我吗?

我用这个修改解决了这个问题:

import psutil

proc_iter = psutil.process_iter(attrs=["pid", "name", "cmdline"])
process = any("/opt/flask_server/downlink_server/downlink_manager.py" in p.info["cmdline"] for p in proc_iter)
print(process)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM