Как заставить Conky правильно отображать данные VLC

У меня есть конфигуратор Conky, который получает вывод скрипта 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 в 23:59

2 ответа

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

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

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

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

0
ответ дан 18 July 2018 в 00:13

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

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

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

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

0
ответ дан 24 July 2018 в 17:10

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

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