다른 두 가지 답변에 제시된 기본 아이디어를 사용하여 "올바른"비디오 카드를 사용하는지 확인하기 위해 다음 스크립트를 작성했습니다 (올바른 = "배터리 및 9400"또는 "AC 어댑터 및 9600 사용")
이 스크립트가 얼마나 취약한 지 잘 모르겠습니다 .system_profile plist에서 특정 순서로 나타나는 특정 데이터에 의존하지만 ...이 순서는 내 컴퓨터에서 일관된 것처럼 보입니다. 구글을 통해 이것을 찾은 사람을 위해 여기에 배치하십시오.
루비 : ( "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)
파이썬 :
# 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)