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/