从python劫持终端stdin

2024-05-23 19:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

python中有没有方法劫持终端stdin?只使用Unix的解决方案就可以了。在

我目前正在为top编写一个小包装器,因为我希望能够监视命名进程,例如所有正在运行的python实例。基本上,我调用pgrep来获取进程id,然后使用-p选项运行top。在

总的来说,这个脚本已经令人满意地工作了几年了(还有一个警告,即top -p只接受20个pid……)。但是,如果新进程与名称模式匹配,我现在希望调整脚本以更新对top的调用。这也相当不错,但是。。。在top中交互设置的任何选项在每次更新pid列表时都会丢失,但在我停止并重新启动top时自然会丢失。因此,我想以某种方式劫持终端stdin,以便能够回溯影响的设置,以便在更新pid列表后进行相应的设置,或者在必要时停止更新(例如,如果top正在等待用户的更多指令)。在

现在也许我所要达到的只是愚蠢的,还有更好的方法来实现它,如果是这样的话,我将高度赞赏启蒙

(哦。标记ps被用作标记top不存在,在这两个实用程序都相关之后,我将在这里新建以定义新标记)

谢谢\p


Tags: 实例方法标记脚本终端列表进程top
1条回答
网友
1楼 · 发布于 2024-05-23 19:27:53

你所做的听起来有点像黑客。我只需要使用psutil编写一个Python脚本,它完全符合您的需要。无论你对什么信息感兴趣,psutil都应该提供给你,甚至更多。在

又快又脏:

import psutil
import time    

while True:
    processes = [ p for p in psutil.process_iter() if 'python' in p.name() ]

    for p in processes:
        # print out whatever information interests you
        print(
                 p.pid, 
                 p.name(), 
                 p.cpu_percent(),
                 p.io_counters().read_bytes,
                 p.io_counters().write_bytes
                )
    time.sleep(10)

文档链接:http://pythonhosted.org/psutil/

相关问题 更多 >