0

だから私はビデオカードの数を見つける方法を知っていますが、私が書いたルビースクリプトで私はそれを決定するためのこの小さな小さな方法を持っていました:

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

しかし、VGAだけでなく3Dも検索する必要があると判断したため、次のように変更しました。

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

しかし、2番目を実行すると0が返されることがわかりました。コマンドラインでコマンドを単独で実行すると、3枚のビデオカードが表示されます(1枚はVGAに搭載され、2枚は3Dカードとして表示されるTesla NVIDIAカード)。何かを台無しにしている可能性のある分割部分で何が起こっているのかわかりません。

どんな助けでも素晴らしいでしょう!

乾杯

4

2 に答える 2

3

man grep:

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

だから、egrep助けるべき

于 2012-08-31T14:55:20.247 に答える
0

私はこの情報を2つの方法のいずれかで追跡します。

ほぼ純粋なコマンドラインバージョンは次のようになります。

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

これにより、整数への最終的な変換を除いて、OSがほとんどすべての作業を実行できるようになります。

-P '\b(?:VGA|3D)\b'は、「単語区切りを見つけてから、VGAまたは3Dを探し、その後に別の単語区切りを探す」というPerl正規表現です。これは、ターゲットが他の文字列に埋め込まれていることによるヒットを回避するのに役立ちます。

more-Rubyバージョンは次のようになります。

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

それは同じことをしますが、すべてRubyでのみです。

于 2012-08-31T17:09:11.197 に答える