0

所以我知道如何找到显卡的数量,但是在我写的一个 ruby​​ 脚本中,我有一个小方法来确定它:

def getNumCards
    _numGpu = %x{lspci | grep VGA}.split("\n").size
end

但是已经确定我需要搜索 3D 和 VGA,所以我将其更改为:

def getNumCards
    _numGpu = %x{lspci | grep "VGA\|3D"}.split("\n").size
end

但是当我运行第二个时,我发现它返回 0。如果我在命令行上自己运行命令,它会显示 3 个视频卡(1 个板载 VGA 卡和两个作为 3D 卡的 Tesla NVIDIA 卡)。我不确定拆分部分中发生的事情可能会搞砸一些事情。

任何帮助都是极好的!

干杯

4

2 回答 2

3

人grep:

-E, --extended-regexp
...
egrep is the same as grep -E. 

所以,egrep应该有帮助

于 2012-08-31T14:55:20.247 回答
0

我会以两种方式之一来获取此信息。

几乎纯命令行版本将是:

def getNumCards
  `lspci | grep -P '\b(?:VGA|3D)\b' | wc -l`.to_i
end

这让操作系统可以完成几乎所有的工作,除了最终转换为整数。

-P '\b(?:VGA|3D)\b'是一个 Perl 正则表达式,它表示“找到一个断词,然后查找 VGA 或 3D,然后是另一个断词”。这将有助于避免由于目标嵌入其他字符串而导致的任何命中。

more-Ruby 版本是:

def getNumCards
  `lspci`.split("\n").grep(/\b(?:VGA|3D)\b/).count
end

它做同样的事情,只是全部在 Ruby 中。

于 2012-08-31T17:09:11.197 回答