从python劫持终端stdin



python中有劫持终端stdin的方法吗?只有Unix的解决方案会做得很好。

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

总的来说,这个脚本已经令人满意地运行了几年了(注意top -p只接受20个pid…)。然而,如果出现了与名称模式匹配的新进程,我现在想调整脚本,将调用更新为top。这也相对不错,但是。。。每当我更新pid列表时,top中交互设置的任何选项都会丢失,但当我停止并重新启动top时,这是自然的原因。因此,我想以某种方式劫持终端stdin,以便能够回溯影响的设置,这样我就可以在更新pid列表后相应地设置它们,甚至在必要时停止更新(例如,如果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/

最新更新