他の2つの回答で示された基本的な考え方を使用して、「正しい」ビデオカードを使用しているかどうかを判断する次のスクリプトを作成しました(正しい=「バッテリーで9400を使用」または「ACアダプターで9600を使用」)
これらのスクリプトがどれほど脆弱かはわかりません... system_profile plistの特定の順序で現れる特定のデータに依存しています...しかし、この順序は私のマシンでは一貫しているようです。Googleでこれを見つけた人のためにここに配置します。
Ruby:(「Plist」gemをインストールする必要があります)
# video_profiler.rb
require 'rubygems'
require 'plist'
# calculate video data
data = `system_profiler SPDisplaysDataType -xml`
structured_video_data = Plist.parse_xml(data)
display_status = structured_video_data[0]["_items"][0]["spdisplays_ndrvs"][0]["spdisplays_status"]
if (display_status.eql?('spdisplays_not_connected')) then
card = '9400'
else
card = '9600'
end
# calculate power source data
data = `system_profiler SPPowerDataType -xml`
structured_power_data = Plist.parse_xml(data)
on_ac_power = (structured_power_data[0]["_items"][3]["sppower_battery_charger_connected"] == 'TRUE')
# output results
if (on_ac_power and card.eql?'9400') or (not on_ac_power and card.eql?'9600'):
result = 'You\'re on the wrong video card.'
else
result = "You\'re on the correct video card."
end
puts(result)
Python:
# video_profiler.py
from subprocess import Popen, PIPE
from plistlib import readPlistFromString
from pprint import pprint
sp = Popen(["system_profiler", "SPDisplaysDataType", "-xml"], stdout=PIPE).communicate()[0]
pl = readPlistFromString(sp)
display_status = pl[0]["_items"][0]["spdisplays_ndrvs"][0]["spdisplays_status"]
if (display_status == 'spdisplays_not_connected'):
card = '9400'
else:
card = '9600'
# figure out battery status
sp = Popen(["system_profiler", "SPPowerDataType", "-xml"], stdout=PIPE).communicate()[0]
pl = readPlistFromString(sp)
on_ac_power = (pl[0]["_items"][3]["sppower_battery_charger_connected"] == 'TRUE')
if (on_ac_power and card == '9400') or (not on_ac_power and card == '9600'):
result = 'You\'re on the wrong video card.'
else:
result = "You\'re on the correct video card."
pprint(result)