我希望能够收集服务器上的CPU数量和存储空间等内容的值,并将它们分配给python脚本中的局部变量。我有paramiko设置,所以我可以SSH到远程Linux节点并对它们运行任意命令,然后将输出返回给脚本。但是,当我要分配的所有命令都是单个整数或值时,许多命令都非常冗长,例如df -h。
对于CPU数量的情况,有Python功能,例如通过psutil模块来获取此值。例如'psutil.NUM_CPUS',它返回一个整数。但是,虽然我可以在本地运行它,但我无法在远程节点上执行它,因为它们没有配置python环境。
我想知道手动解析linux命令的输出(例如df -h等)然后从中获取一个整数是多么常见(类似于bash有“cut”函数)。或者是否在某种程度上更好地在每个远程服务器上设置环境(或更好的方式)。
答案 0 :(得分:1)
不幸的是,手动解析linux命令的输出是很常见的,但你不应该这样做。这是一个非常常见的服务器管理任务,你不应该重新发明轮子。
您可以使用类似sar的内容来记录远程统计信息并通过ssh检索报告。 http://www.ibm.com/developerworks/aix/library/au-unix-perfmonsar.html
你也应该看看盐。它允许您在多台计算机上运行相同的命令并获取其输出。 http://www.saltstack.com/
这些是一些选项,但记得保持干燥;)
答案 1 :(得分:1)
与@Floris一样,我认为最简单的方法是设计命令,以便结果易于解析。但是,解析一个命令的结果并不常见,bash脚本中充满了grep
,sed
,wc
或awk
命令。 p>
psutils本身使用了相同的方法see how it reads /proc/cpuinfo
for cpu_count
。您可以实现相同的解析,只读取距离/proc/cpuinfo
,或计算ls -1 /sys/bus/cpu/devices/
输出中的行。
实际上,获取信息的最佳方式是来自/proc
和/sys
,它们专门用于简化从简单程序访问内部信息的过程,而且只需要最少的解析。
答案 2 :(得分:0)
如果您可以将自己的程序或脚本放在远程计算机上,则可以执行以下操作:
答案 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()