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/