我想在python程序中使用shell命令 top 的数据, 我正在尝试使用子流程模块
执行此操作但是,顶部命令运行的方式是它在终端中打开一种屏幕,这需要键盘中断返回正常终端。
因此,当我从python shell运行命令以从linux shell获取 top 的输出时,脚本将进入无限循环,它永远不会结束。
因此,建议一些方法来正确输出 top 等命令。
答案 0 :(得分:2)
man top
非常有用。
您将找到批处理模式的-b
参数和迭代次数的-n
。两者在一起:
top -b -n 1
会给你想要的结果。
答案 1 :(得分:0)
在一般情况下,在获得所需的输出后,您必须中止子进程。你通常可以通过关闭它的所有连接来做到这一点,然后在它的下一个输出它将收到一个SIGPIPE并通常自己终止。
在这种特殊情况下,您只需使用选项 top
调用-n 1
即可运行一次迭代。这将使它在显示一个屏幕后终止:
import subprocess
output = subprocess.check_output([ 'top', '-n', '1' ])
print output
但要注意!此output
将包含许多终端格式序列。因此解析它可能有点困难。
如果你想要更多的输出,你还应该考虑选项-b
(这归功于@Klaus D.),这使得在达到当前屏幕高度后不会中止。