4

我正在考虑收集服务器数据,并且在这些服务器中预装了 Python 2.6。现在我想知道是否有 Python 库对应于 Ruby 的“因子”,而不是 Python 的“绑定”因子。

我用谷歌搜索了它,但找不到任何东西。有人对此有任何想法吗?

4

4 回答 4

5

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,但想要类似的功能。

于 2012-10-31T21:37:37.330 回答
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() )
于 2011-10-28T04:43:27.097 回答
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
于 2014-01-19T19:27:52.423 回答
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"]

不过,我想我会选择facterpypip install facterpy, 然后:

import facter

facts = facter.Facter()
print facts["architecture"]
于 2013-12-14T02:29:09.807 回答