所以我试图创建一个小程序,通过Volumio的restapi与音乐服务器Volumio交互(这里的文档是:https://volumio.github.io/docs/API/REST_API.html)。基本上,我的程序应该将一个命令作为输入,将其转换为restapi请求,发送请求,并打印出歌曲的状态和标题。我知道这里有输入无效命令的空间,但这不是我目前关心的问题。我担心的是输入命令后的输出是错误的。代码如下:
import json
import requests
def controls(cmd):
volumio = requests.get("http://volumio.local:3000/api/v1/getstate")
vol_data = volumio.text
py_data = json.loads(vol_data)
if cmd == 'getstate':
print(py_data['title'], py_data['status'])
else:
requests.get("http://volumio.local:3000/api/v1/commands/?cmd=%s" % cmd)
print(py_data['title'], py_data['status'])
while True:
input = raw_input('Command: ')
controls(input)
基本上,例如,在提交命令'pause'之后,输出应该是:
^{pr2}$然后再“玩”一次:
(u'04 - The Woods.mp3', u'play')
“next”只需更改歌曲名称并保持状态不变。但以下是我运行时的输出:
Command: play
(u'04 - The Woods.mp3', u'pause')
Command: play
(u'04 - The Woods.mp3', u'play') #showing the state from line 1 command
Command: getstate
(u'04 - The Woods.mp3', u'play') #shows correct updated state
Command: next
(u'04 - The Woods.mp3', u'play') #showing wrong song title
Command: getstate
(u'A.T.A.B.', u'play') #updated and showing correct song title from line 7
Command: pause
(u'A.T.A.B.', u'play')
Command: play
(u'A.T.A.B.', u'pause')
Command:
我的输出似乎落后了一个周期,我不知道为什么。在
因为这就是你在剧本里安排的。您总是调用getstate端点,它显示您执行的最后一个命令,并将结果解析为
py_data
。现在,如果您输入了一个实际的命令,那么您也将发送该命令,但随后输出py_data
的内容,而这些内容尚未更新。在假设发送命令的结果是当前状态,那么您应该在else块中对该结果调用
json.loads
,并将其打印出来。在编辑好的,这里有一个重新定义的函数,它更有意义。在
在这里,如果有命令,就执行命令,然后执行getstate调用。在
相关问题 更多 >
编程相关推荐