如何在循环中运行时为单个输出调用shell命令?

时间:2015-08-03 14:14:48

标签: python linux bash shell

我想在python程序中使用shell命令 top 的数据, 我正在尝试使用子流程模块

执行此操作

但是,顶部命令运行的方式是它在终端中打开一种屏幕,这需要键盘中断返回正常终端。

因此,当我从python shell运行命令以从linux shell获取 top 的输出时,脚本将进入无限循环,它永远不会结束。

因此,建议一些方法来正确输出 top 等命令。

2 个答案:

答案 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.),这使得在达到当前屏幕高度后不会中止。