Как стать Носатым для отображения данных VLC правильно

У меня есть Носатая конфигурация, которая получает вывод сценария Python:

#!/usr/bin/python
import subprocess
import sys
import getopt
def cmd_output(args, **kwds):
      kwds.setdefault("stdout", subprocess.PIPE)
      kwds.setdefault("stderr", subprocess.STDOUT)
      p = subprocess.Popen(args, **kwds)
      return p.communicate()[0]

def main(argv):
        try:
          # name = "org.mpris.MediaPlayer2.vlc" #get this from "qdbus | grep vlc" and change the 3 lines below
            data = str(cmd_output("qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata".split()))
            status = str(cmd_output("qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlaybackStatus".split()))
            current_seconds = int(cmd_output("qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Position".split()))/1000
        except ValueError:
            if not data:
                    print("No Song Playing")
                    sys.exit()
        except:
            print("VLC Not Running")
            sys.exit()
        status = status[:-1]
        start = data.find("title:")
        end   = data.find("xesam:tracknumber:")
        if end==-1:
            end   = data.find("xesam:url:")
        title = data[start+7:end-1]
        if len(title)>40:
             title = "Unknown"
        start = data.find("artist:")
        end   = data.find("xesam:title:")
        artist = data[start+8:end-1]
        if len(artist)>40:
             artist = "Unknown"
        start = data.find("album:")
        end   = data.find("xesam:artist:")
        album = data[start+7:end-1]
        if len(album)>40:
             album = "Unknown"
        start = data.find("vlc:length:")
        end   = data.find("vlc:publisher:")
        length_seconds = int(data[start+11:end])/1000
        current_seconds = int(current_seconds / 1000)
        current_position_percent = str(int((float(current_seconds) / float(length_seconds))*100))                      
        length = str(length_seconds/60).rjust(1,"0")+":"+str(length_seconds%60).rjust(2,"0")
        current_position = str(int(current_seconds/60)).rjust(1,"0")+":"+str(int(current_seconds%60)).rjust(2,"0")
        if len(argv) < 1:
            print("Error: No arguments specified. Type -h for help.")
        try:
            opts, args = getopt.getopt(argv,"tarslcph")
        except getopt.GetoptError:
            print("Error: Unknown argument. Type -h for help.")
            sys.exit(2)
        for opt, arg in opts:
            if opt == "-t":
                print(title)
                sys.exit()
            elif opt == "-a":
                print(album)
                sys.exit()
            elif opt == "-r":
                print(artist)
                sys.exit()
            elif opt == "-s":
                print(status)
                sys.exit()
            elif opt == "-l":
                print(length)
                sys.exit()
            elif opt == "-c":
                print(current_position)
                sys.exit()
            elif opt == "-p":
                print(current_position_percent)
                sys.exit()
            else:
                print("Provide at least one of the following arguments")
                print("-t        Display playing title")
                print("-s        Display playback status")
                print("-l        Display length of the file playing")
                print("-c        Display current position")
                print("-p        Display percent of elapsed time")
                sys.exit()
if __name__ == "__main__":
   main(sys.argv[1:])

Это работает отлично, если VLC работает, но не работает вообще, если это не и просто израсходовало процессорное время. Как я предотвращаю ошибку со значением current_seconds, не обеспечивающим верный номер, когда VLC не открыт и играет?

1
задан 29 December 2017 в 22:59

1 ответ

Вы пытались инкапсулировать места, которые вы вызываете с помощью этого скрипта (в вашем файле конфигурации conky) с if_running?

Из документации :

, если PROCESS запущен, отобразить все $ if_running и соответствующий $ endif. Здесь используется команда `` pidof '', поэтому также поддерживается ключ -x.

Например, вы можете попробовать это так: $(if_running vlc)<python script calls>$endif.

0
ответ дан 29 December 2017 в 22:59

Другие вопросы по тегам:

Похожие вопросы: