【问题标题】:Check if python script running from another python script linux检查python脚本是否从另一个python脚本linux运行
【发布时间】:2020-09-23 08:16:03
【问题描述】:

我实际上在后台运行了 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 但不是脚本的名称时。

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

【问题讨论】:

  • 这可能对你有帮助,stackoverflow.com/questions/46979567/…
  • 请注意,如果第一个进程预期被监视,它应该维护一个PID文件/锁。参见例如What is a .pid file and what does it contain?
  • 您的ps 输出显示python3 -u /opt/...,但您的Python 代码会检查process.cmdline() == ['python3', '/opt/...'(请注意缺少的-u)。这是故意的吗?
  • @MisterMiyagi 我也尝试了'python3 -u',但没有任何改变

标签: python python-3.x linux psutil


【解决方案1】:

我通过这个修改解决了这个问题:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多