我正在考虑收集服务器数据,并且在这些服务器中预安装Python 2.6。 现在我想知道是否有Python库对应Ruby的“facter”,而不是Python的“绑定”for facter。
我用Google搜索但却找不到任何内容。有没有人对此有任何想法?
答案 0 :(得分:5)
我看不出为什么你不会只使用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() )
答案 1 :(得分:4)
Salt实现了一个名为Grains的替代品。
http://docs.saltstack.org/en/latest/ref/modules/index.html#grains-data
也有人试图这样做,称为Phacter
http://code.google.com/p/speed/wiki/Phacter
我没有尝试过,但我同意这个概念。有些人可能不希望/能够在他们的系统上安装Ruby,但需要类似的功能。
答案 2 :(得分:1)
有点新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
答案 3 :(得分:0)
这是@ 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"]