在python中读取ssh上的值

时间:2014-02-21 00:56:52

标签: python

我希望能够收集服务器上的CPU数量和存储空间等内容的值,并将它们分配给python脚本中的局部变量。我有paramiko设置,所以我可以SSH到远程Linux节点并对它们运行任意命令,然后将输出返回给脚本。但是,当我要分配的所有命令都是单个整数或值时,许多命令都非常冗长,例如df -h。

对于CPU数量的情况,有Python功能,例如通过psutil模块来获取此值。例如'psutil.NUM_CPUS',它返回一个整数。但是,虽然我可以在本地运行它,但我无法在远程节点上执行它,因为它们没有配置python环境。

我想知道手动解析linux命令的输出(例如df -h等)然后从中获取一个整数是多么常见(类似于bash有“cut”函数)。或者是否在某种程度上更好地在每个远程服务器上设置环境(或更好的方式)。

4 个答案:

答案 0 :(得分:1)

不幸的是,手动解析linux命令的输出是很常见的,但你不应该这样做。这是一个非常常见的服务器管理任务,你不应该重新发明轮子。

您可以使用类似sar的内容来记录远程统计信息并通过ssh检索报告。 http://www.ibm.com/developerworks/aix/library/au-unix-perfmonsar.html

你也应该看看盐。它允许您在多台计算机上运行相同的命令并获取其输出。 http://www.saltstack.com/

这些是一些选项,但记得保持干燥;)

答案 1 :(得分:1)

与@Floris一样,我认为最简单的方法是设计命令,以便结果易于解析。但是,解析一个命令的结果并不常见,bash脚本中充满了grepsedwcawk命令。 p>

psutils本身使用了相同的方法see how it reads /proc/cpuinfo for cpu_count。您可以实现相同的解析,只读取距离/proc/cpuinfo,或计算ls -1 /sys/bus/cpu/devices/输出中的行。

实际上,获取信息的最佳方式是来自/proc/sys,它们专门用于简化从简单程序访问内部信息的过程,而且只需要最少的解析。

答案 2 :(得分:0)

如果您可以将自己的程序或脚本放在远程计算机上,则可以执行以下操作:

  1. 在远程计算机上编写一个脚本,输出您想要的内容,并通过ssh执行该脚本。
  2. 使用ssh隧道连接另一台计算机上的端口,并与远程计算机上的服务器通信,该服务器将通过套接字响应您想要的数据信息。

答案 3 :(得分:0)

由于您已经拥有SSH连接,我建议您使用 Python的sh库。对于这种任务来说非常好,你得到的结果非常快。

from sh import ssh

myserver = ssh.bake("myserver.com", p=1393)

print(myserver) # "/usr/bin/ssh myserver.com -p 1393"

# resolves to "/usr/bin/ssh myserver.com -p 1393 whoami"
iam2 = myserver.whoami()