如何在Windows、Linux及Mac上定位运行myscript.py的Python进程
如何识别运行特定Python脚本(如myscript.py)的进程
要区分出运行myscript.py的Python进程,核心是获取进程的命令行参数——启动脚本时的命令行里会明确包含脚本文件名。psutil库完全支持跨平台(Windows、Linux、Mac)获取这个信息,直接改进原有代码即可:
改进后的代码
import psutil target_script = "myscript.py" for proc in psutil.process_iter(['pid', 'name', 'cmdline']): try: # 先筛选Python相关进程 if "python" not in proc.info['name'].lower(): continue # 获取命令行参数,空列表则跳过 cmdline = proc.info.get('cmdline', []) if not cmdline: continue # 检查命令行中是否包含目标脚本名 # 可根据需求调整匹配逻辑:比如用endswith处理绝对路径场景 if any(target_script in part for part in cmdline): print(f"找到目标进程: PID={proc.info['pid']}, 命令行={' '.join(cmdline)}") except (psutil.NoSuchProcess, psutil.AccessDenied): # 处理进程已退出或无权限访问的情况 continue
代码说明
- 新增
cmdline属性:通过psutil.process_iter指定获取进程的命令行参数列表,这是区分脚本的核心依据 - 异常处理:避免遍历过程中遇到进程已退出、无权限访问等报错导致程序中断
- 灵活匹配:用
any(target_script in part for part in cmdline)可以匹配脚本名出现在命令行任意位置的情况(比如python /home/user/myscript.py或python -m myscript);若需精确匹配文件名结尾,可改为any(part.endswith(target_script) for part in cmdline) - 跨平台兼容:自动适配不同系统的Python进程名(python、python3、python3.11、python.exe等)
示例输出
找到目标进程: PID=1245157, 命令行=python /home/user/myscript.py --arg1 value1 找到目标进程: PID=2973672, 命令行=python3.11 ./myscript.py
注意事项
- 权限要求:Linux/Mac下查看其他用户的进程可能需要sudo权限,Windows下可能需要以管理员身份运行脚本
- 同名脚本区分:如果系统中有多个同名的
myscript.py,可以通过匹配完整路径(比如/home/user/myscript.py)来精准定位 - Pythonw.exe场景:Windows下后台运行的Python脚本可能是
pythonw.exe,代码中的判断已覆盖这种情况
内容的提问来源于stack exchange,提问作者ullix
相关产品推荐
相关产品推荐

