python中有没有办法劫持终端stdin?仅限Unix的解决方案会很好。

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

总体而言,此脚本已经令人满意地工作了几年(top -p仅接受20 pid的警告...)。但是,如果与名称模式匹配的新进程诞生了,我现在想调整脚本以将调用更新到顶部。这也相对较好,但是...每次更新pid列表时,在top中交互设置的所有选项都会丢失,但是由于我停止并重新启动top的自然原因。因此,我想以某种方式劫持终端stdin以便能够回溯曾经生效的设置,因此我可以在更新pid-list之后,甚至在必要时停止更新(例如,如果top正在等待来自更多信息的更新)后进行相应设置。用户)。

现在也许我想要实现的只是愚蠢的事情,并且有更好的方法可以实现,如果是的话,我非常感谢启发

(哦,标签ps被使用,因为标签top不存在,在所有两个实用程序都关联之后,我要在这里新建标签以定义新标签)

谢谢\ p

最佳答案

您正在做的事情听起来有点像骇客。我只是使用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/

关于python - 从python劫持终端stdin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41966419/

10-11 23:13
查看更多