有没有办法在python中劫持终端stdin?仅Unix解决方案就可以了。
我正在编写一个围绕top
的小包装器,因为我希望能够监视命名的进程,例如所有正在运行的python实例。基本上我正在调用pgrep
来获取进程ID,然后使用top
选项运行-p
。
总的来说,这个脚本已经令人满意地工作了几年(同时警告top -p
只接受20个pid ......)。但是,如果与名称模式匹配的新进程诞生,我现在想调整脚本以将调用更新到top。这也相当不错,但是......每次更新pid列表时,top
中以交互方式设置的任何选项都会丢失,但是当我停止并重新启动top
时,自然原因就会丢失。因此,我想以某种方式劫持终端stdin以便能够回溯设置有效的设置,以便我可以在更新pid-list后相应地设置它们,或者甚至在必要时停止更新(例如,如果顶部正在等待更多指令来自用户)。
现在或许我想要实现的只是愚蠢而且有更好的方法去做,如果是这样我会高度赞赏启蒙
(哦。标签ps
被用作标签top
不存在,我要在这里定义新标签,在所有两个实用程序都相关之后)
谢谢\ p
答案 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)