>我实际上有在后台运行的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.')
它看起来很简单,但相信我,我已经尝试了在另一个主题上提出的其他功能,如下所示:
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")
但是这个函数并没有影响我的脚本,当我搜索 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)