Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的Bash脚本不知道如何_Python_Python 3.x_Bash - Fatal编程技术网

Python的Bash脚本不知道如何

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;; 以撒 完成 有可能吗 我找到了这个,但我不能让它工作。我收到分段错误(堆芯转储

我想将此脚本转换为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;;
以撒
完成
有可能吗

我找到了这个,但我不能让它工作。我收到
分段错误(堆芯转储)

更新

我想我可能已经做到了,但如果没有我注释掉的循环中的高处理器使用率,我似乎无法循环它。我还试图复制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的示例用法