我正在考虑收集服务器数据,并且在这些服务器中预装了 Python 2.6。现在我想知道是否有 Python 库对应于 Ruby 的“因子”,而不是 Python 的“绑定”因子。
我用谷歌搜索了它,但找不到任何东西。有人对此有任何想法吗?
Salt实现了一种称为Grains的Facter替换。
http://docs.saltstack.org/en/latest/ref/modules/index.html#grains-data
也有一个尝试这样做,称为 Phacter
http://code.google.com/p/speed/wiki/Phacter
我没有尝试过,但我同意这个概念。一个人可能不想/不能在他们的系统上安装 Ruby,但想要类似的功能。
我看不出你为什么不使用 facter 本身的任何理由。输出格式很容易在 python 脚本中使用。
import subprocess
import pprint
def facter2dict( lines ):
res = {}
for line in lines:
k, v = line.split(' => ')
res[k] = v
return res
def facter():
p = subprocess.Popen( ['facter'], stdout=subprocess.PIPE )
p.wait()
lines = p.stdout.readlines()
return facter2dict( lines )
if __name__ == "__main__":
pprint.pprint( facter() )
有点新http://github.com/hihellobolke/sillyfacter/
安装使用
# Needs pip v1.5
pip install --upgrade --allow-all-external --allow-unverified netifaces sillyfacter
您也可能需要升级 pip
# To upgrade pip
pip install --ugrade pip
这是@AndrewWalker 建议的更压缩版本。它还确保在拆分之前存在 ' => ' 并删除尾随 \n :
import subprocess
p = subprocess.Popen( ['facter'], stdout=subprocess.PIPE )
p.wait()
facts = p.stdout.readlines()
# strip removes the trailing \n
facts = dict(k.split(' => ') for k in [s.strip() for s in facts if ' => ' in s])
print facts["architecture"]
不过,我想我会选择facterpy。pip install facterpy
, 然后:
import facter
facts = facter.Facter()
print facts["architecture"]