Python的Bash脚本不知道如何
我想将此脚本转换为Python 3.5:Python的Bash脚本不知道如何,python,python-3.x,bash,Python,Python 3.x,Bash,我想将此脚本转换为Python 3.5: #/bin/bash dbus监视器--会话“type='signal',interface='org.gnome.ScreenSaver''| 读x时;做 大写“$x” *“boolean true”*)source/home/user/bin/TV Off.sh;; *“boolean false”*)source/home/user/bin/Super on.sh;; 以撒 完成 有可能吗 我找到了这个,但我不能让它工作。我收到分段错误(堆芯转储
#/bin/bash
dbus监视器--会话“type='signal',interface='org.gnome.ScreenSaver''|
读x时;做
大写“$x”
*“boolean true”*)source/home/user/bin/TV Off.sh;;
*“boolean false”*)source/home/user/bin/Super on.sh;;
以撒
完成
有可能吗
我找到了这个,但我不能让它工作。我收到分段错误(堆芯转储)
更新
我想我可能已经做到了,但如果没有我注释掉的循环中的高处理器使用率,我似乎无法循环它。我还试图复制bash脚本,但运气不佳,但我觉得我遗漏了一些简单的东西
#!/usr/bin/python3.7
import dbus
#import time
count = 0
#while True: <---- First loop try high cpu
session_bus = dbus.SessionBus()
gnome_screensaver = 'org.gnome.ScreenSaver'
object_path = '/{0}'.format(gnome_screensaver.replace('.', '/'))
get_object = session_bus.get_object(gnome_screensaver, object_path)
get_interface = dbus.Interface(get_object, gnome_screensaver)
status = bool(get_interface.GetActive())
# print(status) <---- First loop try high cpu
# if status == True: <---- First loop try high cpu
# print("do something") <---- First loop try high cpu
# if status == False: <---- First loop try high cpu
# print("stopping") <---- First loop try high cpu
# count += 1 <---- First loop try high cpu
# time.sleep(10) <---- First loop try high cpu
# if count >= 500: <---- First loop try high cpu
# break <---- First loop try high cpu
x = status
#while x: <- Second loop try didnt work no output as screen goes black
if status == True:
print("do something")
if status == False:
print("stopping")
#/usr/bin/python3.7
导入DBU
#导入时间
计数=0
#虽然是真的:所以经过一点搜索,我找到了我需要的东西
所以我改变了一点
#!/usr/bin/python3.7
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
#from Newtest import tvon, tvoff
import dbus
import logging
#def sccreen():
logging.basicConfig()
logger = logging.getLogger(__name__)
dbus_loop = DBusGMainLoop(set_as_default=True)
def message_callback(bus, message):
if message.get_interface() == "org.gnome.ScreenSaver":
if message.get_member() == "ActiveChanged":
screensaver_enabled = bool(message.get_args_list()[0])
# screensaver_enabled = bool(message.get_args_list()[0] and true)
logger.info("Screen saver changed. Active: %s", screensaver_enabled)
if screensaver_enabled == True:
global tvonn
print("tv off")
tvonn = False
# tvoff()
if screensaver_enabled == False:
print("tv on")
tvonn = True
# tvon()
# print("oooooo")
# print(screensaver_enabled)
session = dbus.SessionBus(mainloop=dbus_loop)
session.add_match_string_non_blocking("interface='org.gnome.ScreenSaver'")
session.add_message_filter(message_callback)
logger.info("Starting up.")
loop = GLib.MainLoop()
loop.run()
所以,经过一点进一步的搜索,我找到了我需要的
所以我改变了一点
#!/usr/bin/python3.7
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib
#from Newtest import tvon, tvoff
import dbus
import logging
#def sccreen():
logging.basicConfig()
logger = logging.getLogger(__name__)
dbus_loop = DBusGMainLoop(set_as_default=True)
def message_callback(bus, message):
if message.get_interface() == "org.gnome.ScreenSaver":
if message.get_member() == "ActiveChanged":
screensaver_enabled = bool(message.get_args_list()[0])
# screensaver_enabled = bool(message.get_args_list()[0] and true)
logger.info("Screen saver changed. Active: %s", screensaver_enabled)
if screensaver_enabled == True:
global tvonn
print("tv off")
tvonn = False
# tvoff()
if screensaver_enabled == False:
print("tv on")
tvonn = True
# tvon()
# print("oooooo")
# print(screensaver_enabled)
session = dbus.SessionBus(mainloop=dbus_loop)
session.add_match_string_non_blocking("interface='org.gnome.ScreenSaver'")
session.add_message_filter(message_callback)
logger.info("Starting up.")
loop = GLib.MainLoop()
loop.run()
我的意思是,你可以一直使用操作系统,但是…:-)我会为你做一些调查。正如我看到的,您正试图从dbus获取一些状态,在您的例子中,这是Gnome屏幕保护程序总线。回答您的问题:是的,我99%确信这在Python中是可能的。python中有dbus的示例用法,我的意思是,您可以始终使用os.system
,但是…:-)我会为你做一些调查。正如我看到的,您正试图从dbus获取一些状态,在您的例子中,这是Gnome屏幕保护程序总线。回答您的问题:是的,我99%确信这在Python中是可能的。python中有dbus的示例用法