Mac/Python altındaki Sistem Tercihleri'nde Enerji Tasarrufu ayarları nedeniyle ekranın kapalı olup olmadığını nasıl kontrol ederim? i kapalı düşünebilirsinizMac/Python'da ekranın kapalı olup olmadığını nasıl kontrol edebilirim?
cevap
Hızlı ve kirli çözüm: ioreg
arayıp çıkışını ayrıştırmak. Ekran kapalıyken ekran üzerinde ve 1
olduğunda bilgisayarım içinde
import subprocess
import re
POWER_MGMT_RE = re.compile(r'IOPowerManagement.*{(.*)}')
def display_status():
output = subprocess.check_output(
'ioreg -w 0 -c IODisplayWrangler -r IODisplayWrangler'.split())
status = POWER_MGMT_RE.search(output).group(1)
return dict((k[1:-1], v) for (k, v) in (x.split('=') for x in
status.split(',')))
, CurrentPowerState
değeri 4
olduğunu.
Daha iyi bir çözüm: IOKit
'dan bu bilgileri almak için ctypes
kullanın.
tek yolu OSX pmset Power Management CML Tool
DESCRIPTION
pmset changes and reads power management settings such as idle sleep timing, wake on administrative access, automatic restart on power loss, etc.
aşağıdaki linke bakınız kullanarak, bu bilgilerin büyük bir sağlayacağı tam olarak aradığınız şeyi gerçekleştirmede size yardımcı olmalıdır.
http://managingamac.blogspot.com/2012/12/power-assertions-in-python.html
ben "tasarrufu ve dokümantasyon" amaçlı bağlantı tarafından sağlanan kodu içerecektir:
#!/usr/bin/python
import ctypes
import CoreFoundation
import objc
import subprocess
import time
def SetUpIOFramework():
# load the IOKit library
framework = ctypes.cdll.LoadLibrary(
'/System/Library/Frameworks/IOKit.framework/IOKit')
# declare parameters as described in IOPMLib.h
framework.IOPMAssertionCreateWithName.argtypes = [
ctypes.c_void_p, # CFStringRef
ctypes.c_uint32, # IOPMAssertionLevel
ctypes.c_void_p, # CFStringRef
ctypes.POINTER(ctypes.c_uint32)] # IOPMAssertionID
framework.IOPMAssertionRelease.argtypes = [
ctypes.c_uint32] # IOPMAssertionID
return framework
def StringToCFString(string):
# we'll need to convert our strings before use
return objc.pyobjc_id(
CoreFoundation.CFStringCreateWithCString(
None, string,
CoreFoundation.kCFStringEncodingASCII).nsstring())
def AssertionCreateWithName(framework, a_type,
a_level, a_reason):
# this method will create an assertion using the IOKit library
# several parameters
a_id = ctypes.c_uint32(0)
a_type = StringToCFString(a_type)
a_reason = StringToCFString(a_reason)
a_error = framework.IOPMAssertionCreateWithName(
a_type, a_level, a_reason, ctypes.byref(a_id))
# we get back a 0 or stderr, along with a unique c_uint
# representing the assertion ID so we can release it later
return a_error, a_id
def AssertionRelease(framework, assertion_id):
# releasing the assertion is easy, and also returns a 0 on
# success, or stderr otherwise
return framework.IOPMAssertionRelease(assertion_id)
def main():
# let's create a no idle assertion for 30 seconds
no_idle = 'NoIdleSleepAssertion'
reason = 'Test of Pythonic power assertions'
# first, we'll need the IOKit framework
framework = SetUpIOFramework()
# next, create the assertion and save the ID!
ret, a_id = AssertionCreateWithName(framework, no_idle, 255, reason)
print '\n\nCreating power assertion: status %s, id %s\n\n' % (ret, a_id)
# subprocess a call to pmset to verify the assertion worked
subprocess.call(['pmset', '-g', 'assertions'])
time.sleep(5)
# finally, release the assertion of the ID we saved earlier
AssertionRelease(framework, a_id)
print '\n\nReleasing power assertion: id %s\n\n' % a_id
# verify the assertion has been removed
subprocess.call(['pmset', '-g', 'assertions'])
if __name__ == '__main__':
main()
http://opensource.apple.com/source/PowerManagement/PowerManagement-211/pmset/pmset.c
kod IOPMLib dayanır, iddialarını yapmak fonksiyonlar, güç olaylarını programlayın, termik ölçüm yapın ve daha fazlasını yapın.
biz IOKit Framework geçmesi gerekiyor, Python ile bu işlevleri çağırmak için. Bize Python C veri türlerini işlemek için Amacıylahttp://developer.apple.com/library/mac/#documentation/devicedrivers/conceptual/IOKitFundamentals/
biz ctypes adında bir yabancı işlevi arabirimi kullanacağız.
http://python.net/crew/theller/ctypes/
Burada yazar sayfasındaki 's açıklayan sarıcı var; Michael Lynn tarafından yazılmıştır. Yazarın yukarıdaki linkinden yazdığım kod, daha anlaşılır hale getirmek için bu kodun bir tekrarıdır.
Takip ettiğimden emin değilim. Bana öyle geliyor ki bu kod OS X'in uyumasına engel oluyor; Benim sorum ise ekranın kapalı olup olmadığını (enerji tasarrufu ayarları vb.) kontrol etmektir. İki konuyla ilgili olsa da, ekranın kapalı olup olmadığını kontrol etmek için bu kodu nasıl kullanacağımı anlayamıyorum. Belki bir şey özlüyorum Biraz daha detaylandırır mısın? –
- 1. Python'da MySQL bağlantısının kapalı olup olmadığını nasıl kontrol edebilirim?
- 2. Yolun var olup olmadığını nasıl kontrol edebilirim?
- 3. Özellik olup olmadığını nasıl kontrol edebilirim?
- 4. Fonksiyonun kısmi olup olmadığını nasıl kontrol edebilirim?
- 5. Kuyruk boş olup olmadığını nasıl kontrol edebilirim?
- 6. Çocuğun var olup olmadığını nasıl kontrol edebilirim?
- 7. Bir dosya olup olmadığını nasıl kontrol edebilirim?
- 8. Seçicinin qtip olup olmadığını nasıl kontrol edebilirim?
- 9. Dizinin boş olup olmadığını nasıl kontrol edebilirim?
- 10. Dosyanın var olup olmadığını nasıl kontrol edebilirim?
- 11. NSUserDefaults'un var olup olmadığını nasıl kontrol edebilirim
- 12. Sesin çevrimdışı olup olmadığını nasıl kontrol edebilirim?
- 13. Monitörün kapalı olup olmadığını kontrol etme
- 14. MATLAB tutamacının geçerli olup olmadığını nasıl kontrol edebilirim?
- 15. Ekranın hassas olup olmadığını nasıl algılayabilirim?
- 16. Sunucudan yanıtın JSONAobject veya JSONArray olup olmadığını nasıl kontrol edebilirim?
- 17. CultureInfo & DateTimeInfo: 24 saat olup olmadığını nasıl kontrol edebilirim?
- 18. Uygulamamın varsayılan başlatıcı olup olmadığını nasıl kontrol edebilirim
- 19. Ruby'de bir nesnenin yinelenebilir olup olmadığını nasıl kontrol edebilirim?
- 20. dataGridView checkBox'un işaretli olup olmadığını nasıl kontrol edebilirim?
- 21. Bellek eşlemeli bir dosya olup olmadığını nasıl kontrol edebilirim?
- 22. Ruby'de bir nesnenin görünümde sıfır olup olmadığını nasıl kontrol edebilirim?
- 23. Elixir listesinde bir öğe olup olmadığını nasıl kontrol edebilirim?
- 24. Geçerli hücrenin tablonun ilk satırında olup olmadığını nasıl kontrol edebilirim?
- 25. Zaman çerçevesi içinde bir rezervasyon olup olmadığını nasıl kontrol edebilirim?
- 26. WiFi kimlik doğrulamanın başarısız olup olmadığını nasıl kontrol edebilirim
- 27. YouTube kanalının yayının canlı olup olmadığını nasıl kontrol edebilirim?
- 28. SimpleXML ile öğenin var olup olmadığını nasıl kontrol edebilirim?
- 29. Python'da deque boş olup olmadığını nasıl kontrol edebilirim?
- 30. İki yolun aynı bağlama noktasında olup olmadığını nasıl kontrol edebilirim?
Harika, teşekkürler! Btw, Mac'imde "ioreg" çıktısı her ne sebeple kırpılmış ve "CurrentPowerState" i göstermiyordu. Göstermek için 'ioreg' ilk argümanı olarak '-w 0' eklemek zorunda kaldım. –
@ceilingcat Cevabı sadece -w 0' parametresiyle güncelledim. –