在 python 中通过命令查找进程
Find processes by command in python
在我的 Python 脚本中,我想检查 otherscript.py
当前是否在 (Linux) 系统上 运行。 psutil 库看起来是个不错的解决方案:
import psutil
proc_iter = psutil.process_iter(attrs=["name"])
other_script_running = any("otherscript.py" in p.info["name"] for p in proc_iter)
问题是p.info["name"]
只给出了一个进程的可执行文件的名称,而不是完整的命令。因此,如果 python otherscript.py
在系统上执行,则 p.info["name"]
对于该进程将只是 python
,并且我的脚本无法检测 otherscript.py
是否是脚本 运行.
是否有使用 psutil 或其他库进行此检查的简单方法?我意识到我可以 运行 ps
命令作为子进程并在输出中查找 otherscript.py
,但如果存在,我更喜欢更优雅的解决方案。
我想知道这是否有效
import psutil
proc_iter = psutil.process_iter(attrs=["pid", "name", "cmdline"])
other_script_running = any("otherscript.py" in p.info["cmdline"] for p in proc_iter)
http://psutil.readthedocs.io/en/latest/#find-process-by-name
看一下检查 name()、cmdline() 和 exe() 的第二个示例。
供参考:
import os
import psutil
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
此代码正在检查正在进行的进程。
Linux 或 Window
没关系
import psutil
proc_iter = psutil.process_iter()
for i in proc_iter:
print(i)
在我的 Python 脚本中,我想检查 otherscript.py
当前是否在 (Linux) 系统上 运行。 psutil 库看起来是个不错的解决方案:
import psutil
proc_iter = psutil.process_iter(attrs=["name"])
other_script_running = any("otherscript.py" in p.info["name"] for p in proc_iter)
问题是p.info["name"]
只给出了一个进程的可执行文件的名称,而不是完整的命令。因此,如果 python otherscript.py
在系统上执行,则 p.info["name"]
对于该进程将只是 python
,并且我的脚本无法检测 otherscript.py
是否是脚本 运行.
是否有使用 psutil 或其他库进行此检查的简单方法?我意识到我可以 运行 ps
命令作为子进程并在输出中查找 otherscript.py
,但如果存在,我更喜欢更优雅的解决方案。
我想知道这是否有效
import psutil
proc_iter = psutil.process_iter(attrs=["pid", "name", "cmdline"])
other_script_running = any("otherscript.py" in p.info["cmdline"] for p in proc_iter)
http://psutil.readthedocs.io/en/latest/#find-process-by-name 看一下检查 name()、cmdline() 和 exe() 的第二个示例。
供参考:
import os
import psutil
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
此代码正在检查正在进行的进程。 Linux 或 Window
没关系import psutil
proc_iter = psutil.process_iter()
for i in proc_iter:
print(i)