从python

时间:2017-01-31 19:57:54

标签: python linux terminal stdin ps

有没有办法在python中劫持终端stdin?仅Unix解决方案就可以了。

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

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

现在或许我想要实现的只是愚蠢而且有更好的方法去做,如果是这样我会高度赞赏启蒙

(哦。标签ps被用作标签top不存在,我要在这里定义新标签,在所有两个实用程序都相关之后)

谢谢\ p

1 个答案:

答案 0 :(得分:0)

你在做什么听起来有点像黑客。我只想使用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/